javascript — разница между filter_input и прямым доступом к $ _POST после объективного запроса ajax

У меня разные результаты с помощью filter_input(INPUT_POST, 'attribute') а также $_POST['attribute'] и не знаю, почему это происходит.

Post-Request отправляется сборкой JavaScript с JQuery и выглядит так:

// type javaScript
var formData = {
field_a: "valueA",
field_b: "",
field_c: undefined
};
$.ajax({
url: 'serverAddress',
data: {action: 99, formData: formData},
dataType: 'json',
method: 'post',
success: function(){
console.log(arguments)
}
});

Мой PHP-скрипт выглядит так:

// type php
$requestMethod = INPUT_POST;
$response = [
"fi-result" => filter_input($requestMethod, 'formData'),
"direct-result" => $_POST['formData'];
];
echo json_encode($response);

результат, который возвращается, не то, что я ожидал, потому что доступ через filter_input возвращается falseв моих тестах, а не объект JSON, как прямой доступ к суперглобальной $ _POST.

// type json response
{
"fi_result": false,
"direct-result": {
"field_a": "valueA",
"field_b": ""}
}

Почему существуют различия между использованием filter_input и прямым доступом к $ _POST?

Я не хочу получать доступ к суперглобальному $ _POST. Есть ли способ использовать filter_input, как описано выше, без кодирования formData в строку в JavaScript и декодировать его в PHP одним простым шагом после кодирования?

Кстати. Я использую TypeScript для генерации моего JavaScript. Это не поддерживает объект FormData (транспортер выдает ошибку на new FormData()). Так что я не могу использовать это.

1

Решение

Я нашел ответ глубоко в документах PHP. POST не построен для транспортировки глубоких объектов. И метод filter_input пытается получить простые типы данных, такие как string или int. этот метод не анализирует внутренний, поэтому я должен отправить его в виде строки JSON и декодировать его, или я не могу использовать filter_input в моем случае.

Я взял первое и отправил сейчас строки.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]