Diferença entre filter_input e access direto em $ _POST após solicitação ajax objective

Eu tenho resultados diferentes usando filter_input(INPUT_POST, 'attribute') e $_POST['attribute'] e não sei por que isso acontece.

O Post-Request é enviado por uma compilation JavaScript com o JQuery e se parece com isso:

 // 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) } }); 

Meu PHP-Script parece assim:

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

O resultado que está voltando não é o que estava aguardando porque o access via filter_input retorna false em meus testes e não um object json como o access direto no super $ $ _POST global.

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

Por que existem diferenças entre o uso de filter_input e o access direto em $ _POST?

Não quero acessar o super global $ _POST. Existe alguma maneira de usar filter_input como acima sem codificar formData para uma String em JavaScript e decodificá-la em PHP um passo simples após a codificação?

A propósito. Estou usando TypeScript para gerar meu JavaScript. Isso não é compatível com o object FormData (transpiler lança um erro no new FormData() ). Então eu não posso usar isso.

Encontrei a resposta em profundidade nos documentos do PHP. POST não é construído para transportar objects profundos. O método filter_input tenta obter tipos de dados simples, como string ou int. este método não analisa o interior, então eu tenho que enviá-lo como string JSON e decodificá-lo ou não posso usar filter_input no meu caso.

Eu peguei o primeiro e envie agora strings.