Intereting Posts
Последствия безопасности, позволяющие пользователям создавать собственные SVG-файлы Асинхронные / параллельные HTTP-запросы с использованием PHP curl_multi PHP, как установить часовой пояс? Программно создавать изображение с веб-страницы или одного DIV Синтаксис на основе синтаксиса Vim с php PHP: как добавить конечную косую черту в абсолютный URL Как выполнить модульное тестирование Исключения с помощью PHPUnit? Объект для Cookie в PHP Неустранимая ошибка: вызов неопределенного метода mysqli_stmt :: query () Как str_replace раздел PHP Code Сгенерировать все возможные комбинации с помощью набора строк В чем разница между клиентским и серверным программированием? Связь между длиной ввода и длиной зашифрованного текста в AES копирование на временную таблицу занимает много времени Как использовать jquery для автозаполнения с именами пользователей для приложения для сообщений?

обрабатывать запрос json в PHP

При создании ajax-вызова, когда для contentType установлено значение application / json вместо стандартного x-www-form-urlencoded, серверная сторона (на PHP) не может получить параметры сообщения.
в следующем рабочем примере, если я установил contentType в «application / json» в запросе ajax, PHP $ _POST будет пустым. почему это происходит? Как я могу обрабатывать запрос, где contentType – это приложение / json правильно в PHP?

$.ajax({ cache: false, type: "POST", url: "xxx.php", //contentType: "application/json", processData: true, data: {my_params:123}, success: function(res) {}, complete: function(XMLHttpRequest, text_status) {} }); 

 <?php var_dump(json_decode(file_get_contents('php://input'))); ?> 

Вы найдете нераспознанные типы MIME в $HTTP_RAW_POST_DATA . Вы также можете заставить PHP всегда заполнять этот массив (не только для непризнанных типов MIME), задав директиву php.ini always_populate_raw_post_data значение true.

В противном случае исходные данные будут доступны через входную оболочку php://input

Чтобы получить больше информации:

http://us.php.net/manual/en/wrappers.php.php

http://php.net/manual/en/reserved.variables.httprawpostdata.php

http://www.php.net/manual/en/ini.core.php#ini.always-populate-raw-post-data

выше технически корректно, но поскольку я не пишу много PHP, это может быть более полезным

xxx.php будет

 <?php $file = fopen("test.txt","a"); $post_json = file_get_contents("php://input"); $post = json_decode($post_json, true); foreach($post as $key=>$value) { $message = $key . ":" . $value . "\n"; echo fwrite($file,$message); } fclose($file); ?> 

и затем вы можете протестировать

 curl -X POST -H "Content-Type: application/json" -d '{"fieldA":"xyz","fieldN":"xyz"}' http://localhost/xxx.php 

Если у вас есть расширение phalcon, вы можете использовать getJsonRawBody ()

http://docs.phalconphp.com/en/latest/api/Phalcon_Http_Request.html