我需要使用$ .ajax发送一个数组作为post请求的数据,这个数组是一个键值数组, e.g
fields['BrandName'] = "Fiat,BMW"
fields['year'] = "2004,2005"
我试过这个
$.ajax({
type: "POST",
url: url,
dataType: 'json',
data: {'adfields[]': fields},
success: function(data){
alert("passed");
},
error: function(data, status){
alert("error has occurred");
}
});
但它不起作用,我使用wireshark观察请求,但是当我尝试执行fields.length时,没有任何东西在请求中发送,我得到零,尽管字段['BrandName']已定义并且有价值 任何帮助?
答案 0 :(得分:2)
除了alFReD的答案之外,还有两种方法可以将fields
变量编码为对象,以便在Ajax调用中传递键/值属性:
// declare empty object
var fields = {};
// then add keys and values with the syntax you already had
fields['BrandName'] = "Fiat,BMW";
fields['year'] = "2004,2005";
// OR
// declare in one statement
var fields = { 'BrandName' : "Fiat,BMW",
'year' : "2004,2005" };
请注意,花括号{}
仅适用于初始声明:创建对象后,使用方括号访问属性。或者,点符号:
fields.BrandName = "Fiat,BMW";
(点符号仅在键名遵循与其他JS标识符相同的规则时才有效,例如,没有空格,不以数字开头,不是保留字等)。
答案 1 :(得分:0)
那么你只是在数组中添加属性(不是数组成员,而不是数字),实际上因为数组是一个对象,它接受属性但是在序列化中只会写入编号的属性。尝试使用普通对象,我认为应该可行。
JavaScript数组是类似列表的对象,它带有几个内置方法来执行遍历和变异操作。数组的大小和元素的类型都不固定。由于阵列的大小可以随时增大或缩小,因此阵列不能保证密集。通常,这些都是方便的特性,但如果这些是您的用例所需要的东西,您可以考虑使用WebGL类型的数组。
请注意,不应将数组用作关联数组。您可以 使用普通对象,虽然这样做有自己的 注意事项。查看帖子轻量级JavaScript词典 以任意键为例。
来自MDN