На вашем коде на самом деле две ошибки:
Во-первых, DataObject.GetData
возвращает экземпляр объекта . Сначала вам нужно будет отнести этот объект к типу, который вы ожидаете сохранить на этом событии Drag. Затем, считая, что тип returing действительно представляет собой набор строк, вам нужно использовать квадратные скобки ([]) для доступа к первому элементу.
var collection = e.Data.GetData(DataFormats.FileDrop) as IList;
string ficheiro = collection[0];
Обратите внимание, что я нажал на IList
, так как это будет охватывать большинство индексируемых общих коллекций C # (массив, список, hashSet ...).
В другом если этот объект GetData возвращает строку, вы должны сделать:
string ficheiro = e.Data.GetData(DataFormats.FileDrop).ToString();
Использование ввода php: // может помочь, но для меня это не сработало, вот что:
Если эти два проверки не решают вашу проблему, а затем, чтобы узнать, что такое данные, вы должны выполнить эхо или распечатать свои данные до, а затем после декодирования, чтобы узнать, как данные получены и обработаны.
Попробуйте
$data = json_decode(file_get_contents('php://input'), true);
print_r($data);
echo $data["operacion"];
Из вашего json и вашего кода, похоже, что вы правильно произвели операцию слова на вашем конце, но это не в json.
EDIT
Возможно, также стоит попробовать эхо-строку json из ввода php: //.
echo file_get_contents('php://input');
Прочитайте документ:
В общем случае вместо $ HTTP_RAW_POST_DATA следует использовать вход php: //.
blockquote>, как в php Manual
$data = file_get_contents('php://input');
echo $data;
Это сработало для меня.
Используйте $HTTP_RAW_POST_DATA
вместо $_POST
.
Он предоставит вам данные POST как есть.
Вы сможете декодировать его с помощью json_decode()
позже.
$json = file_get_contents('php://input'); $obj = json_decode($json);
– Bikal Basnet
14 September 2014 в 08:31
$HTTP_RAW_POST_DATA
.
– developius
2 October 2016 в 10:11
Если у вас уже есть ваши параметры, например $ _POST ['eg'], и вы не хотите его менять, просто сделайте это так:
$_POST = json_decode(file_get_contents('php://input'), true);
Это спасет вас хлопот об изменении всего $ _POST на что-то еще и позволяет вам делать обычные почтовые запросы, если вы хотите вывести эту строку.
Я хотел бы опубликовать ответ, который также использует curl для получения содержимого, и mpdf , чтобы сохранить результаты в pdf, поэтому вы получите все шаги типичного варианта использования.
// import mpdf somewhere
require_once dirname(__FILE__) . '/mpdf/vendor/autoload.php';
// get mpdf instance
$mpdf = new \Mpdf\Mpdf();
// src php file
$mysrcfile = 'http://www.somesite.com/somedir/mysrcfile.php';
// where we want to save the pdf
$mydestination = 'http://www.somesite.com/somedir/mypdffile.pdf';
// encode $_POST data to json
$json = json_encode($_POST);
// init curl > pass the url of the php file we want to pass
// data to and then print out to pdf
$ch = curl_init($mysrcfile);
// tell not to echo the results
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1 );
// set the proper headers
curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Content-Length: ' . strlen($json) ]);
// pass the json data to $mysrcfile
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
// exec curl and save results
$html = curl_exec($ch);
curl_close($ch);
// parse html and then save to a pdf file
$mpdf->WriteHTML($html);
$this->mpdf->Output($mydestination, \Mpdf\Output\Destination::FILE);
В $ mysrcfile я буду читать данные json, подобные этому (как указано в предыдущих ответах):
$data = json_decode(file_get_contents('php://input'));
// (then process it and build the page source)
Стоит отметить, что если вы используете json_decode(file_get_contents("php://input"))
(как указывали другие), это не удастся, если строка not действительна JSON.
Это может быть просто разрешив сначала проверку правильности JSON. т.е.
function isValidJSON($str) {
json_decode($str);
return json_last_error() == JSON_ERROR_NONE;
}
$json_params = file_get_contents("php://input");
if (strlen($json_params) > 0 && isValidJSON($json_params))
$decoded_params = json_decode($json_params);
Изменить: обратите внимание, что удаление strlen($json_params)
выше может привести к тонким ошибкам, поскольку json_last_error()
изменяет не , когда null
или пустая строка передается , как показано здесь: http://ideone.com/va3u8U