这是我的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选择吗? 如果不是这样,如果有人能给我一个关于我出错的想法......
谢谢, 詹姆斯
答案 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