我正在尝试使用jQuery ajax方法获取一些数据。这是我的代码:
$('body').on('click','.showSlots', function() {
var screen_Id = $(this).attr('id');
//alert(screen_Id);
$.ajax({
url:base_url+'admin/movies/getScreenSlots',
type:'post',
data: {screen_Id:screen_Id},
success: function(result)
{
result = $.parseJSON(result);
//$('.screenList1,.screenList12').empty();
$.each(result, function( key, element )
{
$('<tr class="screenList1"><td><input required name="slotName" type="text" placeholder="enter slot"><input name="screen_id1" required type="hidden" value="'+element.screen_id+'" class="screen_ids1"></td><td><input required name="movieName" type="text" placeholder="Movie Name"></td><td><input required name="rate" type="text" placeholder="rate"></td></tr>').appendTo($(this).closest('table'));
});
}
});
});
成功从数据库获取数据。jquery的"each"函数运行良好。但是"appendTo"函数不起作用。在许多浏览器中尝试过。但所有的问题都是一样的。请帮忙。非常感谢。
this
并不是指您认为它做了什么。
您应该在ajax调用之外找到表元素,并保存到一个变量:
$('body').on('click','.showSlots', function() {
var screen_Id = $(this).attr('id');
var table = $(this).closest('table');
$.ajax({
url:base_url+'admin/movies/getScreenSlots',
type:'post',
data: {screen_Id:screen_Id},
success: function(result){
result = $.parseJSON(result);
$.each(result, function( key, element ){
$('...your html...').appendTo(table);
});
}
});
});
更改此行:
appendTo($(this).closest('table'));
to
appendTo($('.showSlots').closest('table'));
因为$(this)并不像您在ajax调用的另一个函数中那样引用".showSlots"。
实现的问题是当前元素上下文this
没有引用成功处理程序中单击的showSlots
。
将表的引用存储在一个变量中,并在附加html时使用它。
$('body').on('click', '.showSlots', function() {
var table= $(this).closest('table'); //Store the reference
$.ajax({
success: function(result) {
$.each(result, function(key, element) {
$('<tr ></tr>').appendTo(table); //Use it
});
}
});
});
您必须在某个变量中引用对象,然后在每个循环中使用它。你可以像下面这样做:-
$('body').on('click','.showSlots', function() {
var screen_Id = $(this).attr('id');
$this = $(this);
//alert(screen_Id);
$.ajax({
url:base_url+'admin/movies/getScreenSlots',
type:'post',
data: {screen_Id:screen_Id},
success: function(result)
{
result = $.parseJSON(result);
//$('.screenList1,.screenList12').empty();
$.each(result, function( key, element )
{
$('<tr class="screenList1"><td><input required name="slotName" type="text" placeholder="enter slot"><input name="screen_id1" required type="hidden" value="'+element.screen_id+'" class="screen_ids1"></td><td><input required name="movieName" type="text" placeholder="Movie Name"></td><td><input required name="rate" type="text" placeholder="rate"></td></tr>').appendTo($this.closest('table'));
});
}
});
});
这可能会有所帮助。
您应该这样编写代码,将当前元素保存在名为"obj"的变量中,然后使用该变量添加新创建的行
$('body').on('click','.showSlots', function() {
var screen_Id = $(this).attr('id');
var obj=$(this);
$.ajax({
url:base_url+'admin/movies/getScreenSlots',
type:'post',
data: {screen_Id:screen_Id},
success: function(result)
{
result = $.parseJSON(result);
$.each(result, function( key, element )
{
$('<tr class="screenList1"><td><input required name="slotName" type="text" placeholder="enter slot"><input name="screen_id1" required type="hidden" value="'+element.screen_id+'" class="screen_ids1"></td><td><input required name="movieName" type="text" placeholder="Movie Name"></td><td><input required name="rate" type="text" placeholder="rate"></td></tr>').appendTo($(obj).closest('table'));
});
}
});});