У меня разные результаты с использованием filter_input(INPUT_POST, 'attribute')
и $_POST['attribute']
и не знаю, почему это происходит.
Пост-Запроса отправить на 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 в String в JavaScript и декодировать его на PHP одним простым шагом после кодирования?
Кстати. Я использую TypeScript для генерации своего JavaScript. Это не поддерживает объект FormData (транспилятор выдает ошибку на new FormData()
). Поэтому я не могу использовать это.