将JavaScript数组作为JSON值发送?

9
我该如何将JavaScript数组作为JSON变量发送到我的AJAX请求中?
4个回答

21

这需要你将JavaScript数组序列化成一个字符串,这可以通过使用JSON对象很容易地完成。

var myArray = [1, 2, 3];
var myJson = JSON.stringify(myArray); // "[1,2,3]"
....
xhr.send({
    data:{
        param: myJson
    }
});

由于一些旧版本浏览器中不存在JSON对象,因此您应该包含Douglas Crockford的json2库。

如果您已经依赖于某个库,并且该库包括用于编码/序列化的方法,则可以使用该库。例如,ExtJs具有Ext.encode方法。


它所做的只是创建一个字符串:“[1,2,3]”... 但是,如果我想发送以[]开头和结尾的字符串,服务器端能够区分吗? - thedp
你不是说JSON吗?那只是字符串内容的格式定义。如果你实际上想要发送一个数组到服务器,那就是另外一个问题了。 但是话虽如此,如果数组中的某个元素包含 [ 或 ],那么序列化方法会自动对其进行转义。 - Sean Kinsey
我尝试了一个固定的例子,使用ajax/json将"[1,2,3]"字符串发送到服务器。但是当我使用$val[0]检查接收到的值时,它给出了"["。我需要在服务器端处理json数组才能使用它吗? - thedp
1
$val仍然是一个字符串 - 如果你想要它作为一个数组(包含某些类型的项目),那么你需要解码它。我猜你在使用php,所以你可以尝试json_decode http://php.net/manual/en/function.json-decode.php - Sean Kinsey
1
你需要记住的一件事是,在浏览器中你有ECMAScript(JavaScript),而在服务器上你有PHP(我猜测)。这些是不同的语言,因此具有不同的类型。JSON是一种被两者都理解的“语言”,但它仅支持每种语言的子集。因此,只支持原始数据类型,如字符串、数字和布尔值,以及基本数组,包括索引和关联数组(字面对象表示法)。 - Sean Kinsey

1
这是一个例子:

 var arr = [1, 2, 3];
 $.ajax({
        url: "get.php",
        type: "POST",
        data: {ids:arr},
        dataType: "json",
        async: false,
        success: function(data){
            alert(data);
        }
    });

在get.php文件中:
echo json_encode($_POST['ids']);

使用{ids:arr}将数组转换为对象,直接传递对象并让jQuery格式化查询字符串。


1

如果您没有使用JavaScript库(jQuery、prototype.js等)来为您完成此操作,您可以随时使用{{link1:json.org的示例代码}}


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接