2011-11-06 70 views
0

嗨每一个我需要发送一个数组作为使用$阿贾克斯POST请求的数据,此数组是一个关键值数组, 如

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

有一些方法可以做到http://www.zulius.com/how-to/send-multidimensional-arrays-php-with-jquery-ajax/ –

+1

如何在首位创建'fields' ?看起来你正在混淆数组和对象。 – Quentin

回答

2

继阿尔弗雷德的回答,两种方式您可以将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识别符,例如,没有空格,而不是开始一个数字,不是保留字等作品)
0

嗯,你只是给数组添加属性(不是数组成员,不是数值),事实上,由于数组是一个对象,它接受属性,但在序列化中只有编号的属性会被写入。尝试使用简单的对象,我认为这应该工作。

JavaScript数组是类似列表的对象,带有几个内置方法来执行遍历和变异操作。数组的大小和其元素的类型都不固定。由于数组的大小随时可能增长或缩小,因此数组不能保证密集。一般来说,这些都是很方便的特性,但是如果这些对您的用例来说是可取的,那么您可以考虑使用WebGL类型的数组。请注意,您不应将数组作为关联数组使用。你可以用 来代替它,尽管这样做有它自己的 告诫。以任意键为例,请参阅后面的轻量级JavaScript字典 。

MDN