Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有数字键的对象将以任何方式发送所有以前的数字_Javascript_Php_Ajax_Arrays_Object - Fatal编程技术网

Javascript 带有数字键的对象将以任何方式发送所有以前的数字

Javascript 带有数字键的对象将以任何方式发送所有以前的数字,javascript,php,ajax,arrays,object,Javascript,Php,Ajax,Arrays,Object,事实上,我很难为这个问题定义一个清晰的标题 我有一个数组,其中一个对象的值由一个数字键定义(本例中为22895)。现在,如果我通过Ajax发送这个数组,PHP将检索一个包含22895个键的数组,其中前22894个键为空 我在定义JS数组/对象时是否做错了什么,或者这种情况的修复方法是什么 我的控制台输出(浏览器)如下所示: 而PHP调试将显示以下内容: 我想这很明显:我需要数组只包含一个发送的值(保留键分配) 编辑: 这就是我如何使用Ajax的方法: $.ajax({ url: ba

事实上,我很难为这个问题定义一个清晰的标题


我有一个数组,其中一个对象的值由一个数字键定义(本例中为22895)。现在,如果我通过Ajax发送这个数组,PHP将检索一个包含22895个键的数组,其中前22894个键为空

我在定义JS数组/对象时是否做错了什么,或者这种情况的修复方法是什么

我的控制台输出(浏览器)如下所示:

而PHP调试将显示以下内容:

我想这很明显:我需要数组只包含一个发送的值(保留键分配)

编辑: 这就是我如何使用Ajax的方法:

$.ajax({
    url: baseurl + '/module/functionName',
    context: this,
    type: "POST",
    dataType: "json",
    data: {
        splitTicket: {
            tasks: Review.splitTicket.data.tasks
        }
    }
(...)

这就是
$.param
的工作原理。如果它看到一个数组,它会假定它是一个“普通”密集数组:

 data=[]; data[10]=99;
 $.param({t:data})
返回

"t%5B%5D=undefined&t%5B%5D=undefined&t%5B%5D=undefined&t%5B%5D=undefined&t%5B%5D=undefined&t%5B%5D=undefined&t%5B%5D=undefined&t%5B%5D=undefined&t%5B%5D=undefined&t%5B%5D=undefined&t%5B%5D=99"
将数组转换为对象以避免此问题:

$.param({t:$.extend({}, data)})
结果:

"t%5B10%5D=99"
递归地做这件事

var ary2obj = function(obj) {
    if($.isArray(obj))
        return ary2obj($.extend({}, obj));
    if($.isPlainObject(obj)) {
        var res = {};
        $.each(obj, function(k, v) {
            res[k] = ary2obj(v);
        });
        return res;
    }
    return obj;
}

“我通过Ajax发送此数组”-请向我们展示如何准确地发送此数组。以及如何避免此情况?是否有方法应用此递归?