2012-07-25 48 views
1

我有一個按鈕,觸發一個Ajax功能點擊這樣的:JQuery的阿賈克斯.load負載的東西快速

$.ajax({ 
      type: "POST", 
      dataType: 'json', 
      url: "DBDeleteList.php", 
      data: {listID: listID}, 
      success: refreshMenus($(this)) 
}); 

的PHP文件執行成功,並更新數據庫。

refreshMenus()被調用,我調用.load()重新刷新菜單以反映更新的數據庫,但是加載函數似乎很快(在數據庫更新註冊之前)加載內容。

基本上會發生的是,如果當我通過Jquery .load從頁面加載內容時,它不刷新。如果我手動刷新頁面(例如f5),數據庫會更新並正確顯示菜單。

這裏是refreshMenus():

function refreshMenus(list) { 
    list.parents('li').remove(); 
    $('#sortableLoader').load(window.location.href + ' #sortableMenu'); 
} 

DIV的ID sortableMenu正在更新,它只是更新太早,我想。

+0

可能會在客戶端上得到緩存。禁用緩存並嘗試。 – asawyer 2012-07-25 22:28:57

+0

頁面返回之前是否對數據庫進行了更改? – MrOBrian 2012-07-25 22:30:07

回答

2

你的refreshMenus($(this));正好在完成ajax之前被調用,並將$(this)保存到ajax函數以外的變量中。因此,嘗試這種

var el = $(this); 
$.ajax({ 
    type: "POST", 
    dataType: 'json', 
    url: "DBDeleteList.php", 
    data: { listID: listID } 
    success: function(){ 
     refreshMenus(el); 
    } 
}); 
0

,我認爲你應該使用

success:function(){ refreshMenus($(this)); } 

如果我是正確的,所發生的情況是$就走的是結果refreshMenus($(this))它的回調函數(它甚至可能會引發如果有錯誤你看看控制檯)。這意味着在AJAX甚至開始之前,refreshMenus($(this))實際上被稱爲。此外,你會想要使用jQuery的context或做一些其他答案提及和變化$(this)

0

使用完整的處理程序(始終),而不是成功(完成),並添加一個超時,如果它是neccessary,但它should'nt是作爲服務器端應該由調用回調的時間內完成:

var elem = $(this); 
$.ajax({ 
     type: "POST", 
     dataType: 'json', 
     url: "DBDeleteList.php", 
     data: { listID: listID }  
    }).always(function() { 
     setTimeout(function() { 
      refreshMenus(elem); //`this` will be out of scope 
     }, 300); //or whatever you need  
});​ 
0

嘗試改變refreshMenus($(this))refreshMenus($('#listid'))(使用您的列表要刷新正確的訪問當然:)的,

您遇到的問題是,$(this)元素你」重新傳遞給refreshMenus不是您想要更新的列表元素(或者觸發按鈕),它是xhr(ajax)對象,因此refreshMenus方法沒有獲取它需要更新的元素。

還等什麼Cabloo說是很好的建議 -

success:function(){ refreshMenus($('#listid')); }