用jquery $ .ajax发送一个数组

nta*_*tan 3 ajax jquery

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

data: { action:'add',tblID : tblID, option:productOptions},
Run Code Online (Sandbox Code Playgroud)

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

注意 :

var productOptions=new Array();
    productOptions[0]="test1";
    productOptions[1]="test2";
Run Code Online (Sandbox Code Playgroud)

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

var productOptions=new Array();
        productOptions['color']="test1";
        productOptions['size]="test2";
Run Code Online (Sandbox Code Playgroud)

我没有得到产品选项

任何帮助PLZ

jit*_*ter 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)
});
Run Code Online (Sandbox Code Playgroud)

产量 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
Run Code Online (Sandbox Code Playgroud)

注意:如果你如更换productOptions[0]productOptions[4]警报将显示5!

变体2

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

变体1的productOptions[0]="test1";行为类似于productOptions.push("test1");(但不相同 - 检查变量1下的注释 - push附加到数组的末尾,而另一种语法只是将元素设置在指定的索引处).

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

所以,如果你从第二个变体使用的语法,你实际上有两个属性创建一个空的JavaScript数组对象colorsize.简单的测试

alert(productOptions.color); //yields test1
alert(productOptions.size); //yields test2
alert(productOptions[0]); //yields undefined
Run Code Online (Sandbox Code Playgroud)

这就是变体1工作的原因.有productOptions一个有效的数组,jQuery将其转换为查询字符串,如下所示option=test1&option=test2.

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