У меня разные результаты с помощью 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()
). Так что я не могу использовать это.
Я нашел ответ глубоко в документах PHP. POST не построен для транспортировки глубоких объектов. И метод filter_input пытается получить простые типы данных, такие как string или int. этот метод не анализирует внутренний, поэтому я должен отправить его в виде строки JSON и декодировать его, или я не могу использовать filter_input в моем случае.
Я взял первое и отправил сейчас строки.
Других решений пока нет …