Javascript jQuery 1.4.4+;AJAX请求-post空数组或对象变为字符串

Javascript jQuery 1.4.4+;AJAX请求-post空数组或对象变为字符串,javascript,jquery,ajax,json,post,Javascript,Jquery,Ajax,Json,Post,我有一个Javascript中的对象,我正试图将它发布到PHP脚本中。jQuery1.4.1中的所有内容都有效,但现在在1.4.4或更高版本中,所有空数组或空对象都以字符串(0)的形式到达,这是不正确的 JS: $(document).ready(function() { var obj = {}; obj.one = []; obj.two = {}; obj.three = []; obj.three.push('one'); obj.three.push('two'); obj.three

我有一个Javascript中的对象,我正试图将它发布到PHP脚本中。jQuery1.4.1中的所有内容都有效,但现在在1.4.4或更高版本中,所有空数组或空对象都以字符串(0)的形式到达,这是不正确的

JS:

$(document).ready(function() {
var obj = {};
obj.one = [];
obj.two = {};
obj.three = [];
obj.three.push('one');
obj.three.push('two');
obj.three.push('three');
obj.four = "onetwothree";

$.ajax({
    type: 'POST',
    url: 'ajax.php',
    data: obj,
    success: function(data) {
        alert(data);
    },
});
});
<?php
var_dump($_POST);
?>
array(4) {
  ["one"]=> string(0) ""
  ["two"]=> string(0) ""
  ["three"]=> array(3) {
    [0]=> string(3) "one"
    [1]=> string(3) "two"
    [2]=> string(5) "three"
  }
  ["four"]=> string(11) "onetwothree"
}
PHP:

$(document).ready(function() {
var obj = {};
obj.one = [];
obj.two = {};
obj.three = [];
obj.three.push('one');
obj.three.push('two');
obj.three.push('three');
obj.four = "onetwothree";

$.ajax({
    type: 'POST',
    url: 'ajax.php',
    data: obj,
    success: function(data) {
        alert(data);
    },
});
});
<?php
var_dump($_POST);
?>
array(4) {
  ["one"]=> string(0) ""
  ["two"]=> string(0) ""
  ["three"]=> array(3) {
    [0]=> string(3) "one"
    [1]=> string(3) "two"
    [2]=> string(5) "three"
  }
  ["four"]=> string(11) "onetwothree"
}

在版本1.4.1中,它不会发送[“一”]或[“两”],但现在在较新的版本中,它以字符串的形式到达这一事实会使整个应用程序受到影响。我能做些什么,使空数组([])以空数组([])的形式到达PHP,并与JavaScript对象相同吗?

尝试将
传统的
选项设置为
true

$.ajax({
    type: 'POST',
    traditional: true,
    url: 'ajax.php',
    data: obj,
    success: function(data) {
        alert(data);
    }
});
查看的
数据
传统
选项


如果希望在IE7中工作,请在
成功
回调后删除多余的逗号。

尝试对传递的参数应用JSON.stringify

 data: JSON.stringify ( obj ),
注意:您可能希望包含
contentType:“application/json”
选项,以提示服务器端正确处理数据

引述:

传统:true是完全错误的,因为它永远无法处理对象层次结构。取而代之的是:…&key=[object object],这是javascript对所有对象的toString()默认结果


谢谢你,Karim79,我试着将传统的转换为true,但是空数组和对象仍然是字符串(0),但是现在我的嵌套数组变成了[object object].Hi。你找到这个问题的解决办法了吗?我对此也很感兴趣。在我看到你的帖子之前,我已经发布了。