2014-07-04 27 views
0

我真的不知道我在這裏做錯了什麼。我得到了一些JavaScript(用jQuery)是這樣的:有沒有一種方法來執行JavaScript代碼在啓動同步AJAX調用之前執行

function myFunc(){ 
    $('.wait').addClass('waiting'); 
    console.log('wait'); 
    var r = $.ajax({type: "GET", url: "my_URL", async: false}).responseText; 
    $('.wait').removeClass('waiting'); 
    console.log('stop wait'); 
    return r; 
} 

我的問題是出類「等待」不會添加,而這樣做的呼叫......我的意思是,當我打電話給我的功能,我得到了一個應該在開頭出現的div,然後在刪除之後它不出現。 一切似乎都在進行。我得到了我的Ajax調用,結果當我試圖不

$('.wait').removeClass('waiting'); 

我格現身但只有在我得到的Ajax響應來執行它。我想時間的要求,並把它大約2秒 ...所以我不知道爲什麼會發生這種情況。

它可能與同步ajax調用有關嗎?由於JavaScript是一種過程語言,因此我認爲應該在登錄到控制檯之前並在啓動ajax調用之前添加該類,但是在得到響應後我得到了所有修改(即使在JavaScript控制檯中,在ajax調用之後)。

任何幫助將是非常好的!

+0

爲什麼同步調用爲什麼不是async ??? –

+1

由於您正在進行同步呼叫,您看不到任何可見的更改。您不會讓瀏覽器有機會進行迴流。 –

+0

我使用同步,因爲它是一種驗證方法,我得到多個用戶編輯一個文件,當他們進行修改時,我不希望他們覆蓋的東西。所以我凍結頁面,以確保有人沒有修改的東西在meen時間... – Incognito

回答

0

該函數運行時瀏覽器中沒有任何反應,所以您需要使用異步代碼,以便瀏覽器可以更新元素。在瀏覽器有機會更新之後,您可以使用setTimeout方法運行代碼的其餘部分。

由於代碼是異步的,所以不能從函數返回值,因爲在AJAX調用之前函數存在。使用一個回調函數來獲取值:

function myFunc(callback){ 
    $('.wait').addClass('waiting'); 
    window.setTimeout(function(){ 
    var r = $.ajax({type: "GET", url: "my_URL", async: false}).responseText; 
    $('.wait').removeClass('waiting'); 
    callback(r); 
    }, 0); 
} 

你一定要使用異步代碼更新元素,你可以如讓AJAX調用異步的,即保持瀏覽器被請求時反應遲鈍:

function myFunc(callback){ 
    $('.wait').addClass('waiting'); 
    $.ajax({type: "GET", url: "my_URL", success: function(data){ 
    $('.wait').removeClass('waiting'); 
    callback(data); 
    }}); 
} 
+0

感謝您的幫助,但即使需要花費大量時間來重構所有內容,我仍會繼續努力......感謝您的幫助 – Incognito

0

在這裏你去異步版本。你應該傳遞將被調用的回調函數。在給定的情況下,return data是錯誤的。

function myFunc() { 
    $('.wait').addClass('waiting'); 
    console.log('wait'); 
    var r = $.ajax({ 
     type: "GET", 
     url: "my_URL", 
     async: true, 
     success: function (data) { 
      $('.wait').removeClass('waiting'); 
      console.log('stop wait'); 
      return data; 
     } 
    }) 
} 
+0

我不想使用異步版本,我有很多功能在開始時調用我的東西,然後繼續考慮電話已完成... – Incognito

+0

Javascript is singleThreaded sorry。 –

+0

雖然 – Incognito

相關問題