我正在尝试将数组传递给 jquery 的 .ajax() 函数的数据参数。第一种方法是我制作了这样的二维数组:
var arr = new Array();
for(i in someArray){
arr[i] = new Array();
arr[i].lon = "x";
arr[i].lat = "y";
}
然后我尝试将其作为数据传递到$.ajax()中:
$.ajax({
data: { vals : arr },
async: false,
type: "POST",
url: "namedb.php",
dataType: "script",
success: function(data){
result = data;
alert(result);
}
});
test.php 仅返回 $_POST 的所有值。所以 alert() 这里返回:
Array
(
)
但是如果我将代码更改为:
var arr = new Array();
for(i in someArray){
arr[i] = new Array();
arr[i] = { lon: "x", lat: "y" };
}
alert() 返回我所期望的结果:
Array
(
[vals] => Array
(
[0] => Array
(
[lat] => "y",
[lon] => "x"
)
...
)
)
我知道这两种方法都会初始化 arr 每个元素的变量/属性(或者我错了?)。但为什么两种方法的行为不同呢? (抱歉,我可以缩短我的问题,但我想我需要解释一下我是如何找到它的)。
编辑:我添加了初始化(arr[i] = new Array();)。我一定是在编辑问题时把它删除了。但仍然是同样的问题。
最佳答案
那是因为你没有初始化数组元素。
var arr = new Array();
for(i in someArray){
arr[i] = {}; // initialize it!
arr[i].lon = "x";
arr[i].lat = "y";
}
其实我更喜欢写
var arr = new Array();
for(i in someArray){
arr[i] = { lon: "x", lat: "y" };
}
因为我不必输入 arr[i]
3 次。
在数组上使用 for in
循环是错误的,您应该使用 for
循环或 jQuery 的 $.each
var arr = [];
for(var i = 0; i < someArray.length; i ++) {
arr[i] = { lon: "x", lat: "y" };
}
或者
var arr = [];
$.each(someArray, function(i, value) {
arr[i] = { lon: "x", lat: "y" };
});
使用Array.prototype.push
将内容添加到数组中更容易,因为您不需要知道数组的下一个索引,也可以与 arr[arr.length]=something
进行比较。
var arr = [];
$.each(someArray, function(i, value) {
arr.push({ lon: "x", lat: "y" });
});
现在您正在做的是从一个数组收集数据并将其转换为另一个数组。 jQuery 已经有一个函数可以执行此操作: $.map
.
var arr = $.map(someArray, function(value, i) {
return { lon: "x", lat: "y" };
});
请注意,当使用$.each
时,参数是i, value
,当您使用$.map
时,它们会被切换。
关于Javascript - 这个对象定义符号有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5125786/