【问题标题】:How do I add a variable to the end of an object's key?如何将变量添加到对象键的末尾?
【发布时间】: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 中工作。 = 的左侧必须是“可分配给”的(它必须是可评估的参考规范类型)。这意味着它必须是 variableproperty,而不是任意表达式。现在,请记住 data.xdata["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


【解决方案1】:

您的 JSON 对象格式正确,您应该能够从 PHP 读取数据,您可以提供更多显示 php 代码的信息。

您唯一可能缺少的就是对数据进行字符串化:

var steps = [
    {
        bla: blu,
        bla: blu,
        bla: blu
    },
    {
        // etc.. 3 more times same format
    }
];

var dataToSend = { steps: steps };

$.ajax({
    url: base_url + 'index.php/worldmap/ajax/start_travelling',
    type: 'POST',
    data: JSON.stringify(dataToSend),
    success: function(response){
        console.log(response);
    }
});

【讨论】:

  • 这正是我所缺少的,非常感谢!抱歉回复晚了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
相关资源
最近更新 更多