客观ajax请求

时间:2017-01-18 11:10:30

标签: javascript php jquery ajax filter-input

我使用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()上抛出错误)。所以我无法使用它。

1 个答案:

答案 0 :(得分:0)

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

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