我有一些javascript gremlins,由于某种原因我的jquery ajax post请求根本没有出去。我的所有代码“看起来都不错”,但javascript不是我的强项,任何人都可以看到我出错了吗?
$(".deleteWeek").click(function(e){
var answer = confirm("This will delete the selected week. Are you sure?");
if(answer){
$.ajax({
type: 'POST',
url: 'http://localhost/todo/index.php/home/ajax_delete',
data: { page_id : $(this).attr('id') },
success: tableRedraw(data),
dataType: 'html'
})
}
e.preventDefault();
})
如果有帮助,我的tableRedraw函数:
function tableRedraw(data){
$('.week').remove(),
$('thead').after(data)
}
我的点击事件肯定正在注册,我可以将警报放入处理程序中并且它们可以正常运行,但就firebug而言,ajax方面没有任何事情发生。任何帮助都将非常感激。
答案 0 :(得分:3)
您的成功处理程序需要是匿名函数或对函数的引用。
所以你应该这样做:
$.ajax({
type: 'POST',
url: 'http://localhost/todo/index.php/home/ajax_delete',
data: { page_id : $(this).attr('id') },
success: tableRedraw,
dataType: 'html'
});
或
$.ajax({
type: 'POST',
url: 'http://localhost/todo/index.php/home/ajax_delete',
data: { page_id : $(this).attr('id') },
success: function(data) {
$('.week').remove(),
$('thead').after(data)
},
dataType: 'html'
});
这是因为success
属性表示回调。您现在的方式是立即执行tableRedraw
函数,并将结果分配给success
。这不是你想要的。您需要的是对函数的引用(它可以是命名函数或匿名函数)。这样,当AJAX请求成功完成时,将调用该函数(因此,回调)。
您可以将success
属性视为持有指向函数的指针。意思是,整个函数本身就像一个对象一样传递(基本上它是一个对象,因为Javascript中的函数是一流的)。
您需要在操作异步的情况下使用回调。也就是说,您不知道操作何时完成。所以基本上你告诉操作“在这里,当你完成时,采取这个功能并执行它。在那之前我会去做别的事”。处理事件(异步)时,这种方法很典型。
答案 1 :(得分:1)
你确定它没有命中服务器或只是回调没有执行吗?...
你的成功回调应该是success: tableRedraw,
,jQuery会在成功回调时将返回数据作为参数调用该函数。正如现在编写的那样,tableRedraw
函数正在与$.ajax()
调用一起执行,并且回调无效。
IE:
$(".deleteWeek").click(function(e){
var answer = confirm("This will delete the selected week. Are you sure?");
if(answer){
$.ajax({
type: 'POST',
url: 'http://localhost/todo/index.php/home/ajax_delete',
data: { page_id : $(this).attr('id') },
success: tableRedraw,
dataType: 'html'
})
}
e.preventDefault();
})
答案 2 :(得分:1)
试
success: tableRedraw,
或
success: function(data) {
$('.week').remove();
$('thead').after(data);
},
祝你好运!