【问题标题】:How post an array using jquery如何使用 jquery 发布数组
【发布时间】:2014-02-09 11:13:00
【问题描述】:

实际上,我正在尝试使用数据数组发送 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',
});

【问题讨论】:

    标签: php jquery


    【解决方案1】:

    当一个多维数组被传递到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,它写得很好。

    【讨论】:

    • 哇它好用!!!,但我不明白为什么?如果你能解释一下。谢谢!!!
    • 我添加了更多信息,其示例与 php 文档中的示例相同,但格式为便于阅读
    【解决方案2】:

    尝试使用这种语法

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    相关资源
    最近更新 更多