【问题标题】:jQuery: Array in object literal for ajax datajQuery:用于ajax数据的对象文字中的数组
【发布时间】:2012-09-21 19:21:51
【问题描述】:

我有一个带有输入的表单,使用数组作为这样的名称:

<input type="text" name="answer[0]" />

当我执行 ajax 发布并序列化数据表单时,这些工作正常。现在我试图将一个动态对象传递给 jQuery ajax 数据,如果它要序列化表单,它将模仿它所获得的结构。这是我正在尝试的代码:

function sliderCalc(){
        var step = jQuery('[name="step"]').val();
        var max = jQuery('[name="max"]').val();
        var min = jQuery('[name="min"]').val();
        var count = (max - min) / step;
        var sliderData = {};
        for(i=0; i<=count; i++){
            var value = min + (step * i);
            sliderData.answers[i] = value; // key => value created here
        }
        return sliderData;
    }

我收到此错误:

未捕获的类型错误:无法设置未定义的属性“0”

有人对此有好的解决方案吗?

【问题讨论】:

  • 您收到的确切错误消息是什么?
  • 将错误信息添加到底部

标签: javascript jquery ajax


【解决方案1】:

您需要在分配数组元素之前创建 answers 属性:

sliderData.answers = new Array();

【讨论】:

  • 成功了,谢谢!我认为它与 var array[] = (1, 2, 3);
  • 使用[] 优于使用new Array()
【解决方案2】:

这将是创建sliderData的正确方法

    var sliderData = { answers: [] };
    for(i = 0; i <= count; i++) {
        var value = min + (step * i);
        sliderData.answers[i] = value; 
    }

完整代码:

function sliderCalc() {
    var
        step = jQuery('[name="step"]').val(),
        max = jQuery('[name="max"]').val(),
        min = jQuery('[name="min"]').val(),
        count = (max - min) / step,
        sliderData = {
            answers: []
        },
        value = 0;

    for (i = 0; i <= count; i++) {
        value = min + (step * i);
        sliderData.answers[i] = value; // key => value created here
    }
    return sliderData;
}​

【讨论】:

    猜你喜欢
    • 2013-07-10
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 2015-08-03
    • 2012-11-27
    相关资源
    最近更新 更多