【发布时间】:2013-08-14 10:58:05
【问题描述】:
我正在尝试传递这个充满对象的数组:
var steps = [
{
bla: blu,
bla: blu,
bla: blu
},
{
// etc.. 3 more times same format
}
];
使用 jQuery 的 $.ajax() 函数到我的 codeigniter 控制器。
我是这样尝试的:
$.ajax({
url: base_url + 'index.php/worldmap/ajax/start_travelling',
type: 'POST',
data: {
steps: steps
},
success: function(response){
console.log(response);
}
});
但是我得到一个 typeError 并发现传递给控制器的数据对象必须是 key => value 格式。我读到它确实需要一个对象。
所以我想如果我通过了步骤数和每个单独的步骤,我会在我的 codeigniter 控制器中再次将它们放在一个数组中。
所以我最终得到了:
var dataToSend = {
num_steps: steps.length
};
var i = 1;
$.each( steps, function( index, value ) ){
dataToSend.step+i = value; // I want the key to be step_1, step_2 etc..
i += 1;
};
$.ajax({
url: base_url + 'index.php/worldmap/ajax/start_travelling',
type: 'POST',
data: dataToSend,
success: function(response){
console.log(response);
}
});
但您可能会猜到 .step + 1 似乎不起作用。做我想做的事情的正确语法是什么?或者,如果有人知道将多级数组传递给我的 ci 控制器的更好方法,请分享:D
【问题讨论】:
-
x + y = z永远不会在 JavaScript 中工作。=的左侧必须是“可分配给”的(它必须是可评估的参考规范类型)。这意味着它必须是 variable 或 property,而不是任意表达式。现在,请记住data.x和data["x"](提示:“x”可以是后一种情况下的任何字符串)都代表一个属性(当数据命名一个对象时),数组可以简单地被索引data[idx](它仍然是只是一个属性)。 -
感谢您的快速回复!我使用了 dataToSend["step_"+i] = value 并且它正在工作。再次感谢^^
-
很高兴它可以工作:D 如果可能的话,我会使用一个数组,以便它可以写为
dataToSend[i](而不是具有属性 step_0、step_1、step_x..)。一般来说,数组应该用于重复序列,而(正常)对象/属性应该用于一组固定的命名值。 -
这是我第一次尝试的。但由于我将数组传递给 $.ajax --> method:'post' 函数,因此它保存的数组只能有 1 维。您刚才建议的结果是一个多维数组,因为我会将步骤存储在我发送的数组中,这会更好,但在将其发布到我的 codeigniter 控制器时会返回错误。这只是一个丑陋的解决方法,计算步骤并改用 for 循环,但它有效:P
标签: jquery ajax object dynamic key