filter_input 和在 objective ajax 请求后直接访问 $_POST 的区别
Difference between filter_input and direct acces on $_POST after objective ajax request
我使用 filter_input(INPUT_POST, 'attribute')
和 $_POST['attribute']
得到了不同的结果,不知道为什么会这样。
Post-请求由 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
returns false
访问,而不是像 json 对象直接访问超级全局 $_POST.
// type json response
{
"fi_result": false,
"direct-result": {
"field_a": "valueA",
"field_b": ""
}
}
为什么使用 filter_input 和 $_POST 直接访问之间存在差异?
我不想访问超级全局 $_POST。有没有办法像上面那样使用 filter_input 而无需在 JavaScript 中将 formData 编码为字符串并在编码后的 PHP 中解码一个简单的步骤?
顺便说一句。我正在使用 TypeScript 生成我的 JavaScript。那不支持 FormData 对象(转译器在 new FormData()
上抛出错误)。所以我不能用这个。
我在 PHP 文档中找到了答案。 POST 不是为了传输深层对象而构建的。 filter_input 方法尝试获取简单的数据类型,如字符串或整数。此方法不解析内部,因此我必须将其作为 JSON 字符串发送并对其进行解码,否则在我的情况下我不能使用 filter_input。
我拿了第一个,现在发送字符串。
我使用 filter_input(INPUT_POST, 'attribute')
和 $_POST['attribute']
得到了不同的结果,不知道为什么会这样。
Post-请求由 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
returns false
访问,而不是像 json 对象直接访问超级全局 $_POST.
// type json response
{
"fi_result": false,
"direct-result": {
"field_a": "valueA",
"field_b": ""
}
}
为什么使用 filter_input 和 $_POST 直接访问之间存在差异?
我不想访问超级全局 $_POST。有没有办法像上面那样使用 filter_input 而无需在 JavaScript 中将 formData 编码为字符串并在编码后的 PHP 中解码一个简单的步骤?
顺便说一句。我正在使用 TypeScript 生成我的 JavaScript。那不支持 FormData 对象(转译器在 new FormData()
上抛出错误)。所以我不能用这个。
我在 PHP 文档中找到了答案。 POST 不是为了传输深层对象而构建的。 filter_input 方法尝试获取简单的数据类型,如字符串或整数。此方法不解析内部,因此我必须将其作为 JSON 字符串发送并对其进行解码,否则在我的情况下我不能使用 filter_input。
我拿了第一个,现在发送字符串。