【发布时间】:2009-11-07 13:14:18
【问题描述】:
我只能发送字符串或数值,如何发送数组?
【问题讨论】:
标签: javascript ajax arrays
我只能发送字符串或数值,如何发送数组?
【问题讨论】:
标签: javascript ajax arrays
你可能会得到很多答案都说“JSON”。
这里有一些具体的例子。 “数据”保存您发送的内容。
var numArray = [17, 42, 23];
data = '[' + numArray + ']';
var strArray = ['foo', 'bar', 'baz'];
data = '["' + numArray.join('", "') + '"]';
对于一般情况,使用将对象递归编码为 JSON 的函数。如果你真的想要我,我会发布一个示例实现,但这是一个有趣的项目,所以你可能想尝试一下。如果您使用的是 Javascript 库,它可能有自己的 JSON 编码器(例如 jQuery 的 serializeArray)。
【讨论】:
JSON.stringify(myArray) 来获得一个包含 JSON 格式数组的字符串。更多信息并在此处下载json.org/js.html
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
【讨论】:
我只能发送字符串或数值
实际上你只能发送字符串。当您包含一个数字时,它只是变成一个字符串;如果需要,由服务器端脚本将其解析回一个数字。
如何发送数组?
发送多个值的原生 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 解析器来在那里重新创建本机数组值。
【讨论】:
您实际上可以以更简洁的方式发送数组,而不是尝试对 JSON 进行编码。 例如,这有效
$.post("yourapp.php", { 'data[]': ["iphone", "galaxy"] });
请参阅http://api.jquery.com/jQuery.post/ 了解更多信息。
【讨论】: