【问题标题】:Sending array through post jquery [duplicate]通过post jquery发送数组[重复]
【发布时间】:2014-05-16 12:45:01
【问题描述】:

我现在这个问题之前已经被问过,但我从今天早上开始尝试解决这个问题,但我做错了。

我有一个名为 items 的全局变量

我有一个 .ajax 请求,我需要发送 items 数组的内容

物品是这样的

items = new Array();

for (var i = 0; i < 10; i++)
{
   //just populating the list
   var item = [];

   item['some_stuff'] = 'string';
   item['some_int'] = 373;

   items.push(item);

}

//这里是请求

    if (items.length > 0)
    {   
        $.ajax({
                type : "POST",
                url  : "/grad1/adaugaComanda.php",
                data : { "stuff" : items},
                success : function (data){

                    alert(data);
                //  window.location = '/dashboard.php?categ=5&sel=1';

                }
                });
    }

//

请求已执行,但未发送数据。我尝试在数组上使用 JSON.stringify 但它返回空 ([[]])。

任何想法我做错了什么?

【问题讨论】:

  • 您需要将数组定义为var item = {}

标签: javascript jquery


【解决方案1】:
   //just populating the list
   var item;

这声明了一个名为item的变量,但没有给它一个值,所以它是undefined

   item['some_stuff'] = 'string';

这会尝试为undefinedsome_stuff 属性分配一个值。这是不允许的,所以 JS 会抛出异常,脚本会停止执行。

您根本没有提出请求,因为您的脚本还远远不够。

你需要给item分配一个对象:

var item = {}

您已经编辑了您的问题,因此您的代码现在显示为:

var item = [];

您仍然需要在此处使用普通的对象{} 而不是[])。 Array 对象应该只有 numeric 索引。 jQuery 在序列化数组时会忽略数组上的命名属性。

【讨论】:

  • 有没有办法可以将数组转换为对象?
  • @ring0 — 可能,但我不确定,我能想到的所有潜在方法都很糟糕。你真的应该首先使用一个对象。数组只是首先使用的错误数据结构。
  • 我认为var item = new Array(); 也可以。
  • @Manwal — 不。它不会。数组上的命名属性不会被序列化。
  • 谢谢,这真的让我头疼。互联网上充满了误导性信息,包括 stackoverflow。
猜你喜欢
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 2014-04-12
  • 2016-07-25
相关资源
最近更新 更多