通过$.post发送对象


Sending object via $.post

我在名为items的变量中保存了一个对象。

0: Object
    name: "Jim"
         age: "42"
 1: Object
    name: "Bill"
        age: "50"

当试图张贴时

$.post("mypage.php", items, function(data)

我在php页面中得到一个空的post变量,但这会返回post变量

$.post("mypage.php", "name=jim", function(data)

我做错了什么?

编辑它是一个对象数组,所以如果我通过

$.post( "mypage", items[0], function( data) {

我得到了一个结果,但

$.post("mypage",项,函数(数据){

print_r为空

看起来你发布的对象可能是一个数组,格式如下:

items = [
    {
        name: "Jim",
        age: "42"
    },
    {
        name: "Bill",
        age: "50"
    }
]

文档似乎表明您必须传递一个普通对象。你可能想发布以下格式的东西:

items = {
    people: [
        {
            name: "Jim",
            age: "42"
        },
        {
            name: "Bill",
            age: "50"
        }
    ]
};

然后您应该能够通过$_POST['people']访问数据。

更新

准确地说,你可以很好地发布你的数组,它会生成这个后Jim=&Bill=

几乎肯定不是你想要的。但是,如果您遵循jQuery.param指定的语法,您的数组将得到正确处理。应该是和具有名称和值的对象数组:

items = [
    {
        name: "Jim",
        value: "42"
    },
    {
        name: "Bill",
        value: "50"
    }
]

您正在使用一种奇怪的jQuery行为。它可以在$.param函数中找到,该函数在后台用于根据数据准备AJAX查询。

如果发送一个数组,jQuery希望它是一个对象数组,每个对象都有两个键namevalue。您显然没有在该结构中提供数据。您的脚本实际发送的数据如下所示:

Jim=undefined&Bill=undefined

如果在PHP中执行print_r($_POST['Jim']);,则会得到字符串undefined

你显然不想要这个。您需要在对象内发送数组。

{
  people: [
    {
      name: 'Jim', 
      age: 42
    }, 
    {
      name: 'Bill',
      age: '50'
    }
  ]
}

通过这种方式,您的数据将被序列化为:

people[0][name]=Jim&people[0][value]=42&people[1][name]=Bill&people[1][age]=50

如果你做print_r($_POST['people']);,你会得到一个有意义的结果。