2014-06-13 42 views
0

我一直在尋找到jQuery的whenthendeferred關鍵字&功能,但我不能讓我如何應用它們在ready()一個簡單的第三方異步回調方法我的一個觀點的功能。我怎麼推遲JavaScript的執行,直到異步方法完成執行

實際發生的是什麼,我的觀點得到loaded沒有數據,因爲數據應該是從ready()異步方法的執行完成填充,但觀點是loaded前的異步回調方法可以進入它的回調方法。我已經在該回調方法中添加了一個警告,並且在完全加載後頁面已經離開腳本時它不會彈出。

與此相關,我一直在研究jQuery.holdReady()。我有點徘徊,我怎麼才能在這個設計中達到同步。

這是它的樣子。

$(document).ready(function() { 
    var xmlRequest = $('#requestStringHiddenField').val(); 
    var action = "getListOfReservations"; 
    asynchronousCallbackCall(xmlRequest, "callbackMethod", action); 
}); 

function callbackMethod(result) { 
    //unreachable  
    alert(result); 
} 

任何幫助表示讚賞。

回答

0

如果第二和第三個參數asynchronousCallbackCall的回調函數,你應該通過函數本身,而不是他們的名字作爲字符串:

var action = getListOfReservations; 
asynchronousCallbackCall(xmlRequest, callbackMethod, action); 
+0

我只是想用自己的方式,我仍然不能得到它的工作。 – user2918640

+0

視圖結束加載空而不等待asynchronousCallbackCall完成。 – user2918640

+0

這就是異步調用的工作方式。它們立即返回,並在完成時調用回調。 – Barmar

-1

使用同步調用,而不是異步的。在執行下一個代碼之前,同步請求等待該呼叫完成。

var request = new XMLHttpRequest();
request.open('GET','/ getListOfReservations',false); //'false'使請求同步
request.send(null);

if(request.status === 200){
alert(request.responseText);
}

+0

getListOfReservations實際上並不是一些servlet操作映射,而只是javascript方法asynchronousCallbackCall()的一個字符串參數。雖然我不是在處理ajax,但我想知道這種類似的異步JavaScript函數調用。 – user2918640

+0

Eeeck - 同步Ajax是最糟糕的用戶體驗。它在Ajax調用期間查找瀏覽器。它應該幾乎不會被使用。 – jfriend00

+0

那麼同步一個異步JavaScript函數呢.. – user2918640

0

如果使用$.ajax進行異步調用,那麼就應該使用屬性async: false,這將阻止腳本執行,直到通話結束並返回響應。

欲瞭解更多信息,請$.ajax這參考,鏈接:

http://api.jquery.com/jquery.ajax/

+0

我沒有使用ajax。我正在尋找同步ready()中的異步JavaScript函數,以便我可以保存(暫停)ready()以防止頁面加載,直到上述函數調用完成。 – user2918640

+1

請提供異步JavaScript函數的代碼! –