实际上,我在为这个问题定义一些清晰的标题时遇到了一些麻烦。
我有一个数组,其中一个对象作为由数字键定义的值(在本例中为 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;
}
关于javascript - 带有数字键的对象无论如何都会发送所有以前的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24403926/