【问题标题】:Sending object via $.post通过 $.post 发送对象
【发布时间】:2015-02-05 11:31:33
【问题描述】:

我在名为 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)

我做错了什么?

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

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

我得到了结果,但是

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

print_r 为空

【问题讨论】:

  • 您能否发布您的 actual 对象的代码。另外,仅供参考,没有“jQuery 对象”之类的东西,它只是一个对象。
  • 查看浏览器的开发者工具。查看“网络”选项卡。是否正在提出请求?它得到回应了吗?它们是否包含您期望的数据?
  • 搜索 JSON.stringify !
  • @kasperTaeymans 不需要,当您向任何 AJAX 函数提供对象时,jQuery 会自动为您完成。
  • 哦,好吧!不知道...总是使用 stringify。

标签: php jquery ajax object post


【解决方案1】:

看起来您发布的对象可能是具有这种格式的数组:

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

docs 似乎表明您必须传递一个普通对象。您可能想发布以下格式的内容:

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"
    }
]

【讨论】:

  • 我确信这是正确的,并将其标记为正确,但我最终使用 $.ajax 没有任何问题。罗斯
  • 其实错了,jQuery 接受数组就好了,即使键没有保存为名称/值对。
  • jQuery 可以处理数组,但它不会像 OP 所期望的那样运行。
【解决方案2】:

您正在使用 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']);,你会得到一个有意义的结果。

【讨论】:

    猜你喜欢
    • 2014-05-20
    • 2017-05-19
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 2021-05-22
    相关资源
    最近更新 更多