jquery ajax数据对象具有相同键的多个值

gno*_*dar 4 javascript ajax jquery

我想做一个ajax调用,在数据对象中我需要在同一个键中有几个值.

var data = {
    foo: "bar",
    foo: "baz"
}

$.ajax({
    url: http://example.com/APIlocation,
    data: data,
    success: function (results) { console.log(results) },
    dataType: 'json'
});
Run Code Online (Sandbox Code Playgroud)

目的是获得一个类似于以下内容的URL:

http://example.com/APIlocation?foo=bar&foo=baz
Run Code Online (Sandbox Code Playgroud)

我试着像这样构建数据:

var data = {
    foo: ["bar","baz"]
}
Run Code Online (Sandbox Code Playgroud)

不出所料,它没有工作,因为它编码这样的URL:

http://example.com/APILocation?foo%5B%5D=bar&foo%5B%5D=baz
Run Code Online (Sandbox Code Playgroud)

我在这里尝试了解决方案,但无法使其正常工作.

小智 15

您可以使用jQuery $.param将数组转换为包含多次相同键的参数字符串.设置第二个参数,true使其不进行url编码,然后将该字符串传递给AJAX调用中的data属性:

var data = $.param({ foo: ['bar', 'baz'] }, true);
// data is now 'foo=bar&foo=baz'

$.ajax({
    url: 'http://example.com/APIlocation',
    data: data, // Will handle the string correctly.
    success: function (results) { console.log(results) },
    dataType: 'json'
});
Run Code Online (Sandbox Code Playgroud)

或者,使用对象,您可以将traditional属性设置为true:

var data = {
    foo: ["bar","baz"]
};

$.ajax({
    url: 'http://example.com/APIlocation',
    data: data,
    success: function (results) { console.log(results) },
    dataType: 'json',
    traditional: true
});
Run Code Online (Sandbox Code Playgroud)