【问题标题】:Can I send an array by jquery.getJSON?我可以通过 jquery.getJSON 发送一个数组吗?
【发布时间】:2014-07-09 16:36:01
【问题描述】:

我有这个 jquery 代码:

$(".cashOutButton").click(function(e){
    e.preventDefault();
    var sendArray=[{'value': '123', 'type': 'Buy_Order_ID'},
                    {'value': '44.20', 'type': 'Set_Price'},
                    {'value': 'John', 'type': 'seller_Name'},
                    {'value': 'S', 'type': 'Sell_Type'}
                    ];

    var sendData = {'sendArray': sendArray};

    $.getJSON('addToSession.php',sendData,function(data){
        console.log(data);
    });        

})

还有这个php代码——addToSession.php(只是为了测试它是否有效,最终的代码会有所不同):

<?php
print_r($_GET['sendArray']);
?>

它不起作用。什么都没有回来。我的问题是,我可以将一组对象发送到 $.getJSON 吗?还有哪些其他解决方案可以发送数组?它不一定是对象数组,如果可行的话,它可以是数组数组。

【问题讨论】:

    标签: php jquery ajax arrays getjson


    【解决方案1】:

    您可以,这将返回您期望的数据。您可以通过查看浏览器开发人员工具的“网络”选项卡中的响应来测试这一点。

    它没有显示在console.log 中,因为getJSON 要求它获得的响应是​​ JSON,并且您响应的内容声称是 HTML 文档(PHP 的默认值)但包含 @ 的输出987654325@(不是有效的 HTML 或 JSON)。

    发回 JSON 就可以了:

    <?php
        header("Content-Type: application/json");
        echo json_encode($_GET['sendArray']);
    ?>
    

    【讨论】:

    • 它没有用。它让我疯狂。我没听懂你的第一句话。对此进行测试的最佳方法是什么?网络标签在哪里?
    • lifehacker.com/5823880/… 展示了如何打开开发者工具。如果您找不到它们,我不明白您为什么要使用 console.log 编写代码。
    • 它确实有效:test-cases.dorward.me.uk/stackoverflow/24648292(您需要打开开发者工具才能看到 JS 控制台才能看到 console.log 的输出)
    • 它不能工作,因为他在获取请求中发送未定义的值。
    • 我找到了“网络”选项卡,它在“响应”下按预期显示。谢谢你告诉我这件事。我不知道有办法看到这个。但是,为什么我不能让它显示在 console.log 中对我来说是个谜。我正在使用开发人员工具,我只是从未注意到 Net 选项卡,或者我不知道它的用途。我经常使用的控制台选项卡。
    【解决方案2】:

    在这种情况下,您应该改用http://api.jquery.com/jQuery.post/

    JQuery.getJSON,正如方法名称所说,应该用于获取 JSON 数据,而不是发送它。那是因为你的数组被转换为 GET,它会生成像

    这样的 json 请求

    addToSession.php?undefined=123&undefined=44.20&undefined=John&undefined=S

    要发送 JSON 数据,请使用带有“json”数据类型的 jQuery.post。

    $.post( "addToSession.php", sendData, function( data ) {
      console.log( data);
    }, "json");
    

    你的数组应该是这样的:

    {sendData: [ {'value': '123', 'type': 'Buy_Order_ID'},
             {'value': '44.20', 'type': 'Set_Price'},
             {'value': 'John', 'type': 'seller_Name'},
             {'value': 'S', 'type': 'Sell_Type'}
    ]}
    

    【讨论】:

    • 添加"json" 作为$.post 的第三个参数告诉jQuery 将响应解析为JSON,而不是发送JSON。它仍然会使用表单 url 编码格式来发送数据。
    • 重新编辑:数组没有serialize 属性,所以现在您发送字符串undefined
    • 是的,没错,我修好了。我测试了这个,它现在可以工作了。
    • 哦,原来生成undefined=123&amp;undefined=44.20&amp;undefined=John&amp;undefined=S的代码你错了。问题中的代码使用{'sendArray': sendArray},而不是sendArray 作为getJSON 的第二个参数。
    • 没问题,因为作者可以访问代码,他可以将其更改为$_POST? :P 使用 get 请求方法发送数组数据是没有意义的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多