用jquery $ .ajax发送一个数组

时间:2009-12-08 09:47:14

标签: jquery ajax

我正在尝试将数组传递给ajax.Here是代码(productOptions是ARRAY)

data: { action:'add',tblID : tblID, option:productOptions},

据我所知,这种方法(使用对象)jquery做的工作但我根本没有得到选项参数(下面说明)。

通知:

var productOptions=new Array();
    productOptions[0]="test1";
    productOptions[1]="test2";

使用上面的数组我得到了productOptions

var productOptions=new Array();
        productOptions['color']="test1";
        productOptions['size]="test2";

我没有获得productOptions

任何帮助PLZ

1 个答案:

答案 0 :(得分:9)

首先解决方案

productOptions设为Object而不是Array并使用jQuery.extend()productOptions与要在ajax中使用的其余数据合并请求。

var productOptions = new Object();
productOptions['color']="test1";
productOptions['size']="test2";

$.ajax({
  type: "GET",
  url: "test.js",
  dataType: "script",
  data: jQuery.extend({action: 'add'}, productOptions)
});

收益率GET test.js?_=randomjQueryNumber&action=add&color=test1&size=test2


冗长的解释

您的问题主要源于您假设Array对象与关联数组相同时所犯的错误。数组只有许多条目,这些条目可以通过从零开始的索引访问。关联数组由(key, value)对组成。

你可以做一个简单的测试

变式1

var productOptions=new Array();
productOptions[0]="test1";
productOptions[1]="test2";
alert(productOptions.length); //yields 2

注意:例如,将productOptions[0]替换为productOptions[4]警报将显示5 !!

变式2

var productOptions=new Array();
productOptions['color']="test1";
productOptions['size]="test2";
alert(productOptions.length); //yields 0

变体1 productOptions[0]="test1";的行为类似于productOptions.push("test1");(但不一样 - 请检查变体1下的注意 - push附加到结尾数组和其他语法只是在指定的索引处设置元素。

变体2 productOptions['color']="test1";甚至不能用于“数组”;此语法与每个 javascript对象的语法相同,它将属性color设置为对象上的值test1

因此,如果您使用第二个变体的语法,您实际上创建了一个空的javascript数组对象,其中包含两个属性colorsize。简单的测试

alert(productOptions.color); //yields test1
alert(productOptions.size); //yields test2
alert(productOptions[0]); //yields undefined

这就是变体1工作的原因。 productOptions是一个有效数组,jQuery将其转换为查询字符串,看起来像option=test1&option=test2

第二个变体也由jQuery正确处理,因为option:productOptions实际上与option:new Array();

相同