2010-10-12 205 views
0

我有一些javascript的gremlins,由於某種原因,我的jquery ajax發佈請求根本不會出去。我所有的代碼看起來都很好,但是javascript並不是我的強項,任何人都可以看到我的錯在哪裏?jquery不會提交ajax發佈請求

$(".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) 
      } 

我的點擊事件肯定是被註冊的,我可以把處理器警報和他們拿出好的,但據螢火蟲關注,阿賈克斯方面沒有任何發生。任何幫助將非常感激。

回答

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中的函數是一流的)。

您需要在操作異步的情況下使用回調。也就是說,你不知道手術什麼時候會完成。因此,基本上你可以告訴操作「在這裏,完成這個功能並且在你完成時執行它,直到那時我會去做別的事情」。當處理事件(這是異步的)時,這種方法是典型的。

+0

不錯的背景信息,以及感謝您的幫助 – richzilla 2010-10-12 22:48:07

+0

沒問題! (需要字符) – 2010-10-12 22:54:38

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(); 
}) 
1

嘗試

success: tableRedraw, 

success: function(data) { 
    $('.week').remove(); 
    $('thead').after(data); 
}, 

好運!