При совершении ajax вызова, когда contentType установлен на application/json вместо значения по умолчанию x-www-form-urlencoded, сторона сервера (в PHP) не может получить параметры сообщения.
в следующем рабочем примере, если бы я установил contentType на "application/json" в запросе ajax, $ PHP _POST был бы пуст. почему это происходит? Как я могу обработать запрос, где contentType является application/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