2017-06-20 53 views
3

我有一個小的JavaScript函數,它的唯一目的是調用腳本從數據庫獲取一些數據,以便客戶端的其他函數可以使用它。什麼是使用jQuery進行同步ajax調用的不被棄用的方式?

我正在使用jQuery調用來獲取數據,但對於我將對象從成功函數作用域中傳遞出去,我需要關閉異步關閉,這將引發一個棄用警告。

我的函數按預期工作,但我想使用一個不被棄用的方法。這裏是我的功能:

function getData(ID) { 
    var Data = {}; 
    $.ajax({ 
    url: 'script', 
    method: 'POST', 
    dataType: 'json', 
    async: false, 
    data: {action: 'get', id: ID }, 
    success: function(response) { 
     Data = response; 
    }) 
    }); 
    return Data; 
} 

我已經更改了變量名稱的隱私原因,所以道歉,如果他們是模糊的。

此外,爲什麼同步呼叫被認爲對最終用戶體驗有害?

+0

@Keatinge你爲什麼這麼說?它目前每次都按照預期返回對象。 – Fashim

+0

@Keatinge我認爲它會工作,因爲'async:false'選項已被傳遞到'$ .ajax()' –

+1

您可能想看看[如何從異步調用返回響應? ](https://stackoverflow.com/q/14220321/218196)。在那裏,我還談到了同步調用:*「爲什麼它不好?你的JavaScript運行在瀏覽器的UI線程中,任何長時間運行的進程都會鎖定用戶界面,使它不響應。另外,還有一個上限JavaScript和瀏覽器的執行時間將詢問用戶是否繼續執行。「* –

回答

2

由於AJAX調用是asynchronous,您將始終得到空白對象({})作爲迴應。

有2種方法。

  1. 你可以做async:false
  2. 要得到響應返回在AJAX調用嘗試像下面的代碼。其中等待來自服務器的響應。

function getData(ID) { 
    return $.ajax({ 
    url: 'script', 
    method: 'POST', 
    dataType: 'json', 
    //async: true, //default async call 
    data: {action: 'get', id: ID }, 
    success: function(response) { 
     //Data = response; 
    }) 
    }); 
} 


$.when(getData(YOUR_ID)).done(function(response){ 
    //access response data here 
}); 
+0

Ahh cool我還沒有見過使用$ .when之前,爲什麼它被認爲不贊成將async變成false? – Fashim

+1

如果你設置'async:false',你爲什麼使用'$ .when'? –

+0

@FelixKling我想他只是複製粘貼我的代碼來展示他的例子。 – Fashim

相關問題