【问题标题】:Difference between filter_input and direct acces on $_POST after objective ajax request客观ajax请求后filter_input和$_POST直接访问之间的区别
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 2016-04-08
      • 2021-05-28
      • 1970-01-01
      • 2012-06-17
      相关资源
      最近更新 更多