javascript - 目标ajax请求后filter_input和直接访问$_POST之间的区别

标签 javascript php jquery ajax filter-input

我使用 filter_input(INPUT_POST, 'attribute')$_POST['attribute'] 得到不同的结果,但不知道为什么会发生这种情况。

Post-Request 由 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对象 super 全局$_POST。

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

为什么使用filter_input和直接访问$_POST之间存在差异?

我不想访问 super 全局$_POST。有没有办法像上面一样使用filter_input,而无需在JavaScript中将formData编码为字符串,并在编码后通过简单的一步在PHP中对其进行解码?

顺便说一句。我正在使用 TypeScript 生成 JavaScript。这不支持 FormData 对象(编译器在 new FormData() 上抛出错误)。所以我不能使用这个。

最佳答案

我在 PHP 文档深处找到了答案。 POST 不是为了传输深层对象而构建的。 filter_input 方法尝试获取简单的数据类型,如 string 或 int。此方法不会解析内部,因此我必须将其作为 JSON 字符串发送并对其进行解码,否则我无法在我的情况下使用 filter_input。

我拿了第一个,现在发送字符串。

关于javascript - 目标ajax请求后filter_input和直接访问$_POST之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41717877/

相关文章:

javascript - 用 then() 链式 promise

javascript - 在 IE javascript 中添加 eventListener

php - 如何在任何 URL(访问/页面加载)中显示 "daily hits"?

php - 使用非 Paypal 付款方式的 Magento 循环配置文件

javascript - 如何在javascript中以正确的格式设置json

javascript - 通过ajax发送字节数组

javascript - 检索帖子参数

javascript - 使用 'this.currentTime' 获取视频的时间并将其重置为 'hover out' 上的起点

php - codeigniter 是否自动加载

ajax - Grails 中的 jQuery Ajax 请求