如何使用jquery发布数组

时间:2014-02-09 11:13:00

标签: php jquery

实际上我正在尝试使用数据阵列发送ajax调用。这是我的示例代码,criteria是一个数组,但是当我发送此调用时,它不会返回任何数据。但当我尝试使用PHP它完美的工作。这是我的示例php代码

$post = array('criteria'=>array('user_id'=>'user1','subject'=>'meeting'));
$fields = (is_array($post)) ? http_build_query($post) : $post;

$ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://mydomain/task/find');
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$fields);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);        
    $serverOutput = curl_exec ($ch);
    curl_close ($ch);
    error_log('>>>>>>>>>>>>>>>>'.$serverOutput);

那么关注代码的错误是什么?如何使用ajax发送数组?请帮我。

$.ajax({
    type: "POST",
    url: "http://mydomain/task/find",
    data: { "criteria" : [{'user_id':'uesr1'},{'subject':'meeting'}]},
    success: function(data) {
        if (data.status) {
            alert('ok');
        }
    },
    dataType: 'json',
});

实际上这适用于像这样的单个元素

 $.ajax({
    type: "POST",
    url: "http://mydomain/task/find",
    data: { "criteria" : [{'user_id':user1}]},
    success: function(data) {
        if (data.status) {

        }
    },
    dataType: 'json',
});

2 个答案:

答案 0 :(得分:0)

尝试使用此语法

 data:({
                criteria :[{
                    user_id: "user1",
                    subject:"meeting"
                }]
            })

答案 1 :(得分:0)

当多维数组传递给http_build_query时,它以独特的方式运行,并且在javascript中不存在(使用json编码的对象发送复杂数据更常见)

PHP代码的等效数据对象如下:

data: { "criteria[user_id]" : "uesr1", "criteria[subject]" : "meeting" },

php.js库得到了用JavaScript编写的php函数的等价物:http://phpjs.org/functions/http_build_query/

编码是如何完成的

php文档中有一个例子:

<?php
$data = array('user'=>array('name'=>'Bob Smith',
                            'age'=>47,
                            'sex'=>'M',
                            'dob'=>'5/12/1956'),
              'pastimes'=>array('golf', 'opera', 'poker', 'rap'),
              'children'=>array('bobby'=>array('age'=>12,
                                               'sex'=>'M'),
                                'sally'=>array('age'=>8,
                                               'sex'=>'F')),
              'CEO');

echo http_build_query($data, 'flags_');
?>

生成的POST数据(url已解码并包装以便更好地理解):

  user[name]=Bob Smith
& user[age]=47
& user[sex]=M
& user[dob]=5/12/1956
& pastimes[0]=golf
& pastimes[1]=opera
& pastimes[2]=poker
& pastimes[3]=rap
& children[bobby][age]=12
& children[bobby][sex]=M
& children[sally][age]=8
& children[sally][sex]=F
& flags_0=CEO

正如您所看到的那样,使用用于标识级别的括号来展平数组,在jQuery中将同一对象传递为data会产生如下内容:

  user={"name": "Bob Smith", "age": "47", "sex"="M", "dob": "5/12/1956"}
& passtimes=["golf", "opera", "poker", "rap"]
& children={"bobby": { "age": "12", "sex": "M"}, "sally": { "age": "8", "sex": "F"}
& flags_0="CEO"

如果您不知道用于编码POST数据的格式,请参阅wikipedia article on POST它写得很好。