javascript数组错误

时间:2012-01-12 06:21:03

标签: javascript arrays

我曾经在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 )){
        }

解决了这个问题。

2 个答案:

答案 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”}]

所以它不会使用您设置的键/值对 - 您将传递一个空数组,并且不会将任何参数传递给服务器。

所以正确的方法在这里:

  1. 使用var data = {};
  2. 在服务器上,查找$_POST['id']$_POST['name']

答案 1 :(得分:0)

您正在使用像常规对象一样的数组。您正在使用其他属性扩充数组,但数组本身仍为空(您应该有一个array.length === 0,因此为null)。尝试更改

var data = new Array();

var data = {};

看看你得到了什么。