未定义的ajax帖子,用于循环和字符串选择器

时间:2013-10-04 12:20:39

标签: javascript jquery ajax for-loop jquery-selectors

这是我的jquery / ajax noob:)

我想出了这个:

$(function() {  
  $("#moreAdd").click(function() {  
    var dataString = [];
    var selector = '#repeat0';
    var row;
    for(var i=0;$(selector).length != 0;i++){
        row = [];
        selector = '#repeat' + i;
        row.push($(selector).val());
        selector = '#distance' + i;
        row.push($(selector).val());
        selector = '#style' + i;
        row.push($(selector).val());
        selector = '#change' + i;
        row.push($(selector).val());
        selector = '#time' + i;
        row.push($(selector).val());
        dataString.push(row);

        selector = '#repeat' + (i+1); //to check it's finished the for
    }


    $.ajax({  
        type: "POST",  
        url: "/index.php/trainings/showAdd",
        data: dataString,
        dataType: 'json',
        success: function(data) {  
            $("div#addModalBody").html(data.html);
        }  
    });
    return false;
  });  
}); 

但我总是以空帖结束。我认为选择器的功能不正常我可以创建一个字符串,然后使用该字符串通过id选择吗? 如果不是这样,如果有人能给我一个关于我出错的想法......

谢谢, 詹姆斯

2 个答案:

答案 0 :(得分:0)

  

我可以创建一个字符串,然后使用该字符串按id选择吗?

是的,这样做并没有错。选择器只是一个字符串,如果需要,可以动态构建。


  

但我总是以空帖结束

我猜你的意思是发送给showAdd的数据是空的。这是因为您的数据构建错误。

来自docs

  

对象(传递给数据)必须是键/值对。

你没有这样做,你的构建和字符串数组(var dataString = [];)并将其转储到数据(data: dataString)中。数组不是键值对。这是一个关键值对{key:value, key:value}所以你的数组就是你的价值,你的钥匙在哪里?

因此,如果您的方法需要参数(x),并且您希望发送y。你应该这样做:

$.ajax({  
        type: "POST",  
        url: "/index.php/trainings/showAdd",
        data: {x:y},
        dataType: 'json',
        success: function(data) {  
            $("div#addModalBody").html(data.html);
        }  
    });

我不做PHP所以我不确定服务器端应该是什么样子,并且你没有添加应该发送到服务器代码的预期参数。

答案 1 :(得分:0)

如果在这种情况下,您应该使用class

<input type="text" id="repeat0" class="repeat" />
<input type="text" id="repeat1" class="repeat" />
<!-- apply class on elements for distance,style,change,time,etc.-->

您的代码就像,

var dataString = [];
$('.repeat').each(function(index,value){
    obj={};
    obj['repeat']=$(this).val();// repeat value
    obj['distance']= $('.distance:eq('+index+')').val();// let distance class for all distance values
    obj['style']= $('.style:eq('+index+')').val();// let distance class for all distance values
    obj['change']= $('.change:eq('+index+')').val();// let style class for all distance values
    obj['time']= $('.time:eq('+index+')').val();// let time class for all distance values
    dataString.push(obj);    // add data to final array
});
// your ajax code here