我使用filter_input(INPUT_POST, 'attribute')
和$_POST['attribute']
得到了不同的结果,并且不知道为什么会发生这种情况。
使用JQuery通过JavaScript构建发送Post-Request,看起来像这样:
// 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
而不是像超级全局$ _POST上的直接访问那样的json对象。 / p>
// type json response
{
"fi_result": false,
"direct-result": {
"field_a": "valueA",
"field_b": ""
}
}
为什么在$ _POST上使用filter_input和直接访问会有区别?
我不想访问超级全球$ _POST。是否有任何方法可以像上面那样使用filter_input而不将form formData编码为JavaScript中的String,并在编码后的一个简单步骤中用PHP解码它?
顺便说一下。我正在使用TypeScript生成我的JavaScript。这不支持FormData对象(转换器在new FormData()
上抛出错误)。所以我无法使用它。
答案 0 :(得分:0)
我在PHP文档中找到了答案。 POST不是为了传输深层对象而构建的。 filter_input方法尝试获取像string或int这样的简单数据类型。此方法不解析内部,所以我必须将其作为JSON字符串发送并解码它,否则我不能在我的情况下使用filter_input。
我拿了第一个并现在发送字符串。