我以前在js中创建一个数组
var data = new Array();
data['id'] = self.iframeFields.id.val();
data['name'] = self.iframeFields.name.val();
data['location'] = self.iframeFields.location.val();
data['about'] = self.iframeFields.about.val();
data['company'] = self.iframeFields.company.val();
data['website'] = self.iframeFields.website.val();
但传递 var 数据
返回空值
但是 data['id']
返回值。
我做错了什么?
编辑: 在 nrabinowitz 的回答之后,我正在使用
if ($.isArray( data )){ ajax({
url: myurl,
data: {
method: "updateProfile",
data: data
},
normalizeJSON: true,
success: function( response ){
// Check to see if the request was successful.
if (response.success){
alert(response);
} else if (onError){
// The call was not successful - call the error function.
alert(response);
}
}
});
}
因为它是一个对象而不是一个数组,
它没有返回任何东西,
删除
if ($.isArray( data )){ }
解决问题。
最佳答案
在 Javascript 中,你需要一个对象,而不是一个数组:
var data = {};
data['id'] = self.iframeFields.id.val();
// etc...
您希望数组像 PHP 中的关联数组一样工作,但 Javascript 数组不是那样工作的。我假设您要按键设置这些值,然后尝试使用类似 for
的内容遍历数组循环 - 但是虽然您可以按键设置值,因为在 Javascript 中数组只是另一个对象,这些值在标准数组迭代中不可用,并且数组的长度仍为 0 .
编辑:您注意到您正在使用 jQuery 的 .ajax()
将数据发布到服务器的功能。 .ajax()
方法需要一个包含键/值对的对象,并将它们作为 GET 或 POST 参数发送到服务器。所以在你的情况下,如果你使用我上面描述的对象,你的服务器将收到参数 "id"
, "name"
等在 $_POST
数组 - 不是 "data"
参数。
我怀疑,虽然我没有测试过这个,但使用 var data = new Array();
根本行不通,因为 jQuery 序列化传递给 .ajax()
的数据的方式- 即使一个数组也是一个对象,jQuery 会检查它是否是一个数组并且 treats it differently :
If the object passed is in an Array, it must be an array of objects in the format returned by .serializeArray()
[{name:"first",value:"Rick"}, {name:"last",value:"Astley"}, {name:"job",value:"Rock Star"}]
因此它根本不会使用您设置的键/值对 - 您将传递一个空数组并且不会将任何参数传递给服务器。
这里正确的做法是:
- 使用
var data = {};
- 在服务器上,查找
$_POST['id']
,$_POST['name']
等
关于javascript数组错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8830952/