【问题标题】:Ajax return array shows [object Object],[object Object] in PHPAjax 返回数组在 PHP 中显示 [object Object],[object Object]
【发布时间】:2015-11-18 19:25:49
【问题描述】:

在 Jquery 中,我正在创建两个数组,一个嵌入另一个数组中,就像这样......

arrayOne = [{name:'a',value:1}, {name:'b',value:2}]
var arrayTwo = [{name:'foo',value:'blah'},{name:'arrayOne',value:arrayOne}];

然后我将它放在 Ajax 中,并在另一端通过 PHP 提取变量。一个 print_r($arrayTwo) 的结果如下...

Array([foo] => blah [arrayOne] => [object Object],[object Object])

无法提取arrayOne的内容,很遗憾,因为我真的需要它们!谁能告诉我我在 Jquery 中做错了什么,或者我需要在 PHP 中做什么才能使嵌入式数组可访问。

一如既往的感谢


编辑以添加我的 Ajax 代码....

$.ajax({
  type: "POST",
  url:'actions.php',
  data:arrayTwo,
  datatype:'json',
  cache: false,
  success: function(data){

}

})

【问题讨论】:

  • 似乎您在发送数据之前没有正确序列化数据。 [object Object] 是 JavaScript 对象的默认字符串表示形式:console.log({}.toString())。发布您用于发送数据的代码。
  • 你使用的是哪个 jQuery 版本?
  • print_r($arrayTwo['arrayOne']) 只返回 [object Object],[object Object]
  • JQuery 版本 2.1.1

标签: javascript php jquery arrays ajax


【解决方案1】:

问题在于 jQuery 的$.ajax(或者更确切地说是$.param)方法以一种特殊的方式处理对象数组。 jQuery 将使用name 作为参数名称,并使用value字符串 表示作为值:

> $.param([{name: 'foo', value: 42}, {name: 'bar', value: 21}])
"foo=42&bar=21"

但是arrayOne 的字符串表示是你在服务器上看到的无用的东西:

> [{name:'a',value:1}, {name:'b',value:2}].toString()
"[object Object],[object Object]"

documentation 实际上指出了传递数组/对象时的注意事项:

如果传递的对象是Array,则必须是.serializeArray()返回格式的对象数组

[
  { name: "first", value: "Rick" },
  { name: "last", value: "Astley" },
  { name: "job", value: "Rock Star" }
]

注意:由于某些框架解析序列化数组的能力有限,因此开发人员在传递包含嵌套在另一个数组中的对象或数组的 obj 参数时应谨慎。

注意:因为没有普遍认可的参数字符串规范,所以不可能使用这种方法以一种在所有支持这种输入的语言中都能理想地工作的方式对复杂的数据结构进行编码。使用 JSON 格式替代编码复杂数据。


因为你有一个复杂的数据结构,你应该使用 JSON 来编码你的数据:

data: {data: JSON.stringify(arrayTwo)},

在服务器上你只需用它解码它

$data = json_decode($_POST['data'], true);

$data 的结构与arrayTwo 完全相同。

但如果你想实际拥有名称为fooarrayOne的参数,那么你只需要序列化arrayOne的值:

data:  [
  {name:'foo',value:'blah'},
  {name:'arrayOne',value: JSON.stringify(arrayOne)}
],

在 PHP 中:

$arrayOne = json_decode($_POST['arrayOne'], true);

【讨论】:

  • 太棒了!感谢您清晰准确的解释。像梦一样工作。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多