【问题标题】:How to send js array via ajax?如何通过ajax发送js数组?
【发布时间】:2009-11-07 13:14:18
【问题描述】:

我只能发送字符串或数值,如何发送数组?

【问题讨论】:

    标签: javascript ajax arrays


    【解决方案1】:

    你可能会得到很多答案都说“JSON”。

    这里有一些具体的例子。 “数据”保存您发送的内容。

    var numArray = [17, 42, 23];
    data = '[' + numArray + ']';
    
    var strArray = ['foo', 'bar', 'baz'];
    data = '["' + numArray.join('", "') + '"]';
    

    对于一般情况,使用将对象递归编码为 JSON 的函数。如果你真的想要我,我会发布一个示例实现,但这是一个有趣的项目,所以你可能想尝试一下。如果您使用的是 Javascript 库,它可能有自己的 JSON 编码器(例如 jQuery 的 serializeArray)。

    【讨论】:

    • 你能说得更具体点吗?还是演示一下?
    • 通过使用 JSON 您基本上可以使用JSON.stringify(myArray) 来获得一个包含 JSON 格式数组的字符串。更多信息并在此处下载json.org/js.html
    • 当然,AJAX 中的 X 表示 XML(“异步 JavaScript 和 XML”)。 JSON 变体可能应该是 AJAJ。
    【解决方案2】:

    javascript 中没有内置的 JSON 序列化程序,因此您需要使用库。一个好的是json2.js

    这是一个示例:

    // suppose you have an array of some objects:
    var array = [{ prop1: 'value1', prop2: 10 }, { prop1: 'value2', prop2: 20 }];
    // convert it to json string:
    var jsonString = JSON.stringify(array);
    // TODO: send the jsonString variable as a parameter in an ajax request
    // On the server side you will need a JSON deserializer
    // to convert values back to an array of objects
    

    【讨论】:

    【解决方案3】:

    我只能发送字符串或数值

    实际上你只能发送字符串。当您包含一个数字时,它只是变成一个字符串;如果需要,由服务器端脚本将其解析回一个数字。

    如何发送数组?

    发送多个值的原生 HTML 表单方式是使用多个输入。您可以通过多次包含相同的命名参数来重现这一点。发送[1,2,3]:

    http://www.example.com/ajax.script?a=1&a=2&a=3
    

    可以在 AJAX 发布请求中发送相同的多参数实例查询字符串。

    如果您使用更高级别的框架来创建表单编码字符串,则取决于框架如何接受多个参数实例。例如,使用 jQuery,您可以发布像 {a: [1,2,3]} 这样的对象。

    另一种方法是忘记标准的 HTML 表单编码,而只需以您喜欢的任何特殊编码传递您的所有值,这样您就可以保留数据类型和结构。通常这将是 JavaScript 值文字 (JSON):

    http://www.example.com/ajax.script?a=%5B1%2C2%2C3%D
    

    (即[1,2,3],URL 编码。)然后您需要在服务器上使用 JSON 解析器来在那里重新创建本机数组值。

    【讨论】:

      【解决方案4】:

      您实际上可以以更简洁的方式发送数组,而不是尝试对 JSON 进行编码。 例如,这有效

      $.post("yourapp.php", { 'data[]': ["iphone", "galaxy"] });
      

      请参阅http://api.jquery.com/jQuery.post/ 了解更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-14
        • 2016-03-15
        • 2016-10-28
        • 2010-09-22
        • 1970-01-01
        • 2013-01-09
        • 2017-04-20
        相关资源
        最近更新 更多