我曾经在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
会返回空值
但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 )){ }
解决了这个问题。
答案 0 :(得分:3)
在Javascript中,您需要一个对象,而不是一个数组:
var data = {};
data['id'] = self.iframeFields.id.val();
// etc...
您期望数组在PHP中像关联数组一样工作,但Javascript数组不能以这种方式工作。我假设您按键设置这些值,然后尝试使用类似for
循环的迭代遍历数组 - 但是当可以按键设置值时,因为在Javascript数组只是另一个对象,这些值在标准数组迭代中不可用,并且数组的长度仍为0。
编辑:您注意到您正在使用jQuery的.ajax()
函数将数据发布到服务器。 .ajax()
方法需要一个包含键/值对的对象,并将它们作为GET或POST参数发送到服务器。因此,在您的情况下,如果您使用上述对象,您的服务器将在"id"
数组中接收参数"name"
,$_POST
等 - 不< / em>一个"data"
参数。
我怀疑,虽然我没有对此进行测试,但使用var data = new Array();
根本不起作用,因为jQuery序列化传递给.ajax()
的数据的方式 - 即使数组也是一个对象,jQuery检查它是否是一个数组和treats it differently:
如果传递的对象位于Array中,则它必须是.serializeArray()返回的格式的对象数组
[{名称: “第一”,值: “瑞克”}, {名称: “最后”,值: “阿斯特利”}, {name:“job”,value:“Rock Star”}]
所以它不会使用您设置的键/值对 - 您将传递一个空数组,并且不会将任何参数传递给服务器。
所以正确的方法在这里:
var data = {};
$_POST['id']
,$_POST['name']
等答案 1 :(得分:0)
您正在使用像常规对象一样的数组。您正在使用其他属性扩充数组,但数组本身仍为空(您应该有一个array.length === 0,因此为null)。尝试更改
var data = new Array();
到
var data = {};
看看你得到了什么。