Не удается прочитать переменную NULL в PHP после публикации массива JSON через .ajax () - PullRequest
0 голосов
/ 17 мая 2019

У меня проблема, как и у многих других людей, - возможность прочитать переменную массива PHP после отправки ее через ajax ().Ajax успешно выполняет и отображает возвращенные данные, которые имеют значение NULL.Я уже тщательно исследовал SO-решения для этой проблемы JSON / PHP, и мое описание проблемы показывает «почти» КАЖДОЕ решение на SO.

На стороне PHP, которую я пробовал:

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

(Пропуск $ HTTP_RAW_POST_DATA (устарел), поскольку он равен file_get_contents ('php: // input')

, а также:

$data = json_decode($_POST["a_arr"], true);

Я уже пытался очиститьUTF-8 BOM с командой sed

sed '1s/^\xEF\xBB\xBF//' < index.html > index2.html

Мой .ajax () выглядит следующим образом:

$.ajax ({
    url:"file.php",
    method:"post",
    contentType: "application/json; charset=utf-8",
    data: { a_arr : JSON.stringify(arr) },
    })
    .done(function(response){
        $("#status").html(response);
    });

На стороне Javascript вот мой массив:

var arr = [{"name":_name, "phone":_phone, "email":_email, "repname":repname, "repnumber":repnumber, "office":office}];
ajax_post(arr);

Я проверил, чтобы убедиться, что нет ошибки форматирования JSON, следующее успешно показывает мне допустимый форматированный массив JSON:

var data_arr = JSON.stringify(arr);
document.getElementById("status").innerHTML = data_arr;

1 Ответ

2 голосов
/ 17 мая 2019

Вам необходимо изменить значение на:

data: JSON.stringify(arr),

Когда вы передаете объект параметру data:, он преобразует его в кодированный URL-формат, а не в JSON.

Или выможете оставить параметр data: как есть, но избавиться от параметра contentType:, и тогда вам следует использовать

$data = json_decode($_POST['a_arr'], true);
...