在$ .ajax中发送键值数组

时间:2011-11-06 09:46:16

标签: javascript jquery

我需要使用$ .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']已定义并且有价值 任何帮助?

2 个答案:

答案 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