0

我是 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 选择吗?如果不是这样的话,如果有人能给我一个想法,我哪里错了..

谢谢,詹姆斯

4

2 回答 2

0

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

是的,这样做没有错。选择器只是一个字符串,您可以根据需要动态构建它。


但我总是得到一个空帖子

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

文档

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

您不这样做,而是建立字符串数组(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,所以我不确定服务器端应该是什么样子,而且您还没有添加应该发送到服务器代码的预期参数。

于 2013-10-04T12:27:44.260 回答
0

你应该使用classif 在这种情况下,

<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
于 2013-10-04T12:30:30.643 回答