2017-01-18 1 views
1

У меня разные результаты с использованием 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()). Поэтому я не могу использовать это.

ответ

0

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

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