javascript - 带有数字键的对象无论如何都会发送所有以前的数字

标签 javascript php ajax arrays object

实际上,我在为这个问题定义一些清晰的标题时遇到了一些麻烦。

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

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

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

enter image description here

虽然 PHP 调试显示以下内容:

enter image description here

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

编辑: 这就是我使用 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;
}

http://jsfiddle.net/CAv9P/

关于javascript - 带有数字键的对象无论如何都会发送所有以前的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24403926/

相关文章:

javascript - 预览 html 页面而不打开它

javascript - 如何为jquery mouseup选择单词包装html标签?

php - MySQL插入多条记录并在另一个表中引用它们

php - PDOException SQLSTATE[HY093] : yii-2 where and between Query

php - 从php获取数据到ajax

javascript - 如何制作不隐藏非钻取类别的 HighCharts 钻取柱形图/条形图

javascript - 编写无需 webpack 即可运行的 webpack 浏览器代码

java - PHP中post方法读取数据

javascript - 有时 ajax 有效,有时无效,单击行功能也不起作用

javascript - jQuery 自动完成在 $.ajax 中找不到 $(this)