每个ajax请求发送一个数组

时间:2015-05-08 06:44:18

标签: javascript arrays ajax

我希望将带有数组(可以是任意长度)的ajax请求作为1参数发送,例如:

mandatoryFields = [];
for (i = 1; i <= post_type_max_elements; i++) {
    ...
    var mandatoryItem = []
    mandatoryItem['optionName'] = optionName;
    mandatoryItem['optionValue'] = optionValue;
}


var data = {
    action: 'update_mandatory_fields',
    post_type: select_post_type,
    mandatoryFields: mandatoryFields
};
jQuery.ajax({
    type: 'POST',
    dataType: "json",
    data: data,
    ...

似乎,这不起作用,因为没有定义服务器参数mandatoryFields。 哪种方式最好?

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以使用JSON.stringify()将数组转换为字符串。

  

JSON.stringify()方法将JavaScript值转换为JSON字符串,如果指定了replacer函数,则可以选择替换值,或者如果指定了replacer数组,则可以选择仅包含指定的属性。

在你的例子中:

$.ajax({
  type: "POST",
  url: url,
  data: {yourData: JSON.stringify(data)},
  success: function(response){
      //Callback function - do something if the request succeeded
  }
});

请注意,您也可以使用$.post()代替$.ajax()

要使用php重建数组,您可以使用json_decode($_POST['yourData']);

答案 1 :(得分:1)

jQuery,默认情况下,以PHP方式序列化数组:

$.ajax({
  url: "http://example.com/",
  data: {
    foo: [1, 2]
  }
})

将序列化为http://example.com/?foo[]=1&foo[]=2。如果您的服务器端框架支持这种参数传递方式,您应该在参数对象中重建一个数组。

如果没有,并且您的服务器支持同名的多个参数值,您可以$.ajaxSetup({ traditional: true });;这会使ajax序列化为http://example.com/?foo=1&foo=2

maja提到的第三个选项是明确地对所有复合值进行JSON编码(以及在服务器端,JSON解码)。

由于您未指定服务器端解决方案的内容,因此我无法告诉您可以使用的前两个优雅方案中的哪一个;第三,手动的是万无一失的。

答案 2 :(得分:0)

我是在客户上做的:

mandatoryFields[mandatoryFields.length]= JSON.stringify(  {optionName: optionName, optionValue: optionValue}  )

在服务器上我看到$ _POST(php)var有值:

update_mandatory_fields $_POST::Array
(
    [action] => update_mandatory_fields
    [post_type] => post
    [mandatoryFields] => Array
        (
            [0] => {\"optionName\":\"post_type_mandatory_selection:post::element_1\",\"optionValue\":\"post_type_mandatory_selection:post::element_1:C\"}
        )

在圆圈中我没有找到正确的方法如何处理字符串 [0] =&gt;

{\"optionName\":\"post_type_mandatory_selection:post::element_1\",\"optionValue\":\"post_type_mandatory_selection:post::element_1:C\"}
foreach( $mandatoryFields as $nextMandatory ) {
    $optionValue= json_decode($nextMandatory['optionValue']); // NULL
    $optionName= json_decode($nextMandatory['optionName']); // NULL

这是正确的方法吗?