Угловой метод Http.post не работает / не отправляет мои данные на сервер [дубликат]

На вашем коде на самом деле две ошибки:

Во-первых, 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();

185
задан dakab 20 December 2016 в 07:30
поделиться

8 ответов

Использование ввода php: // может помочь, но для меня это не сработало, вот что:

  • проверить кодировку данных. Если это URLEncoded, убедитесь, что он отправлен URLEncoded.
  • убедитесь, что кавычки не были экранированы из-за флага волшебных кавычек.

Если эти два проверки не решают вашу проблему, а затем, чтобы узнать, что такое данные, вы должны выполнить эхо или распечатать свои данные до, а затем после декодирования, чтобы узнать, как данные получены и обработаны.

-1
ответ дан boisvert 19 August 2018 в 18:23
поделиться

Попробуйте

$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');
365
ответ дан Dom 19 August 2018 в 18:23
поделиться
  • 1
    Привет В обоих случаях я ничего не вижу на экране – Pablo Ramirez 18 September 2013 в 10:00
  • 2
    Для чего это стоит, операция - это правописание (дайте или возьмите акцент) на испанском языке. – Patrick 1 October 2013 в 08:44
  • 3
    Его точка зрения заключалась в том, что он не произносил это правильно в обоих местах, будь то операция или операция в обоих местах. – msj121 12 December 2013 в 06:39
  • 4
    До PHP 5.6 получение содержимого ввода php: // возможно только один раз. Может ли ваш код или каркас открыть его где-то раньше? – aljo f 18 February 2015 в 00:45
  • 5
    operacion верен, operation - нет. – Felo Vilches 22 September 2017 в 19:01

Прочитайте документ:

В общем случае вместо $ HTTP_RAW_POST_DATA следует использовать вход php: //.

, как в php Manual

10
ответ дан giuseppe 19 August 2018 в 18:23
поделиться
$data = file_get_contents('php://input');
echo $data;

Это сработало для меня.

0
ответ дан hyperCoder 19 August 2018 в 18:23
поделиться

Используйте $HTTP_RAW_POST_DATA вместо $_POST.

Он предоставит вам данные POST как есть.

Вы сможете декодировать его с помощью json_decode() позже.

34
ответ дан JakeGould 19 August 2018 в 18:23
поделиться
  • 1
    Поскольку $ HTTP_RAW_POST_DATA устарел, вы можете использовать этот способ для чтения JSON POST $json = file_get_contents('php://input'); $obj = json_decode($json); – Bikal Basnet 14 September 2014 в 08:31
  • 2
    Для меня этот общий ответ [используйте $ json = file_get_contents ('php: // input'); ] Я видел, что не работал, когда JSON отправлялся с внешними наиболее «контейнерными символами». в виде []. Этот ответ здесь с RAW_POST_DATA сделал трюк для меня. И отлично с моим текущим стеком PHP. Я застрял какое-то время. Большое спасибо за это решение! – gnB 18 March 2015 в 22:21
  • 3
    Это все еще довольно актуально, например, для веб-узлов GitLab (например), вам все равно придется использовать $HTTP_RAW_POST_DATA. – developius 2 October 2016 в 10:11
  • 4
    Thanx alot man ... он работал как шарм – Abdeali Chandanwala 25 February 2017 в 12:36
  • 5
    Я искал и искал решение, и Бикель Баснет твоя работала для меня. Благодаря! – Scooter 1 March 2017 в 01:41

Если у вас уже есть ваши параметры, например $ _POST ['eg'], и вы не хотите его менять, просто сделайте это так:

$_POST = json_decode(file_get_contents('php://input'), true);

Это спасет вас хлопот об изменении всего $ _POST на что-то еще и позволяет вам делать обычные почтовые запросы, если вы хотите вывести эту строку.

39
ответ дан Steve Chan 19 August 2018 в 18:23
поделиться
  • 1
    Спасибо, сэр. Это работало в моем случае, когда я делаю json-сообщение от Android до PHP! – vanurag 21 March 2018 в 12:51

Я хотел бы опубликовать ответ, который также использует 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)
0
ответ дан Stratboy 19 August 2018 в 18:23
поделиться

Стоит отметить, что если вы используете 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

17
ответ дан XtraSimplicity 19 August 2018 в 18:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: