【发布时间】:2017-01-18 11:10:30
【问题描述】:
我使用filter_input(INPUT_POST, 'attribute') 和$_POST['attribute'] 得到不同的结果,但不知道为什么会发生这种情况。
Post-Request 由带有 JQuery 的 JavaScript 构建发送,如下所示:
// 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 对象。
// type json response
{
"fi_result": false,
"direct-result": {
"field_a": "valueA",
"field_b": ""
}
}
为什么在 $_POST 上使用 filter_input 和直接访问有区别?
我不想访问超级全局 $_POST。有没有什么办法可以像上面那样使用 filter_input ,而不用在 JavaScript 中将 formData 编码为 String 并在编码后简单的一步在 PHP 中对其进行解码?
顺便说一句。我正在使用 TypeScript 来生成我的 JavaScript。这不支持 FormData 对象(转译器在new FormData() 上抛出错误)。所以我不能用这个。
【问题讨论】:
标签: javascript php jquery ajax filter-input