jquery不会提交ajax帖子请求

时间:2010-10-12 22:31:58

标签: jquery

我有一些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方面没有任何事情发生。任何帮助都将非常感激。

3 个答案:

答案 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);
},
祝你好运!