2010-01-27 76 views
0

在我的代碼中,我做了這樣的事情。如何處理Ajax 4.0中的異步調用(使用jquery?)

$.get('/Home/Module/Submit', 
       { moduleName: ModName, 
        moduleParameters: moduleParameters 
       }, 

    function(result) { 


     $("#" + target).html(result); 

    }); 

當我把警報在函數(結果){..} 它顯示HTML完美(均在警戒,並在「.aspx頁target'上)但 當我刪除警報..在頁面上'html'不出現或隨機出現(這種方法被稱爲多次)

我認爲'結果'來異步功能這就是爲什麼它不綁定與各自的'div ' 但是在最後一次迭代中,它每次都會綁定。

我們可以讓流程停止,直到數據被綁定爲止嗎? 還是有沒有任何功能(如警報),可以使數據綁定.. 不干擾UI(不像警報)?

回答

0

您的回調函數使用target,該函數在外部範圍(可能是全局範圍)中定義。你說你多次進行這個調用,而且最後一次迭代每次都有效,所以我猜測target實際上是受外界影響而改變的?在這種情況下,很可能在執行時target的值不是您認爲的值。您可以創建一個新的封閉器,其target將肯定不會改變:

$.get('/Home/Module/Submit', { data }, (function(t) { 
    return function(result) { 
     $("#" + t).html(result); 
    } 
})(target)); 

我們在這裏所做的就是創建一個回報回調函數要使用新的匿名功能。您可以將其視爲工廠功能。這個函數被立即調用,只是之前get的調用,因爲必須對它進行求值以計算第三個參數以傳遞給get。我們稱這個函數爲target,因此target的值將是AJAX調用時的值,而不是AJAX響應時的值。將爲每次迭代創建一個新閉包,其相應的t參數在創建時將對應於target的值。

你這樣做不是想要拿出一些東西來保持JavaScript執行,直到執行了某段代碼。

+0

html隨機獲取綁定...但最後的位置始終顯示...此問題僅在Internet Explorer中出現,而不在Chrome和Firefox中 – dexter 2010-01-27 09:00:54