javascript数组错误

标签 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['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"}]

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

这里正确的做法是:

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

关于javascript数组错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8830952/

相关文章:

c++ - 数组赋值

javascript - 如何让我的弹出窗口在 3 秒后消失

javascript - Vue函数不更新数据变量

javascript - 从一副牌中发牌和从阵列中取出牌

c# - 如何确定数组的基础类型

在 C 中计算传递给 scanf() 的参数

javascript - 字体大小转换器

javascript - 如何发送带有对象数组(包括 FormData 中的文件)的嵌套对象?

javascript - click() 在 Selenium headless 模式下不单击按钮

c++ - 首先按给定顺序打印所有数字,然后使用数组打印所有字符和其他符号