2016-06-21 147 views
2

我想知道爲什麼我得到這個錯誤,如果我送就像一個Ajax請求:jQuery的Ajax請求的異步假

$.ajax({ 
    url: "testOperation.php", 
    async: false, 
    data: compareHeure, 
    success: function (data, statusRequest) { 
}) 

錯誤:

Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.

是否有問題?

感謝,

+2

爲什麼你需要一個同步AJAX?這是警告不是錯誤。 – Jai

+1

這很清楚說明*同步XMLHttpRequest線程已被**棄用*** – Justinas

回答

2

我想知道爲什麼我得到這個錯誤

簡短的回答是,因爲這個選項在阿賈克斯的:

async: false, 

有可能成爲您目前遇到的問題的其他更好的解決方案。如果你發佈更多關於你爲什麼需要使用Synchronous ajax的細節?


無論是用這樣的方式:

$.ajax({ 
    url:'', 
    type:'post', 
    success:function(data){ 
     // make another ajax call here then  
    } 
}) 

您可以使用jQuery.when()

$.when($.ajax("/page1.php"), $.ajax("/page2.php")).done(function(a1, a2) { 
    // here you can get both ajax response when both gets completed. 
    console.log(a1); 
    console.log(a2); 
}); 

這裏.done()只有當AJAX被完成執行。

+0

你知道我是初學jQuery ajax,我想執行更多的請求,但我需要第一個請求的響應,然後再發送第二個請求。那爲什麼async:false – Gaetan

+0

爲什麼不使用'Promise'或'jQuery.when()'爲此呢? – Jai

+0

我會嘗試你的建議,謝謝 – Gaetan

0

主線程上的同步XMLHttpRequest已棄用,因爲它對最終用戶的體驗有不利影響。如需更多幫助,請查詢https://xhr.spec.whatwg.org/

這只是發生了警告:在沒有做,你的代碼

你必須在代碼中的語法錯誤,非工作和缺少}

$.ajax({ 
    url: "testOperation.php", 
    async: false, 
    data: compareHeure, 
    success: function (data, statusRequest) { 
    } 
}); 
0

你得到,因爲同步的XMLHttpRequest警告阻止用戶界面威脅,這通常不是一個好的選擇(實際上它已被棄用)。

阻止用戶界面威脅使任何用戶交互延遲和草率可能導致瀏覽器掛起一段時間。

儘可能將AJAX用於異步調用,並使用回調或承諾來檢測何時該調用具有狀態:成功,進度或拒絕(失敗)。

例子:

https://jsfiddle.net/sb11heds/

var jqxhr = $.ajax("https://fiddle.jshell.net/favicon.png") 
    .done(function() { 
    alert("success"); 
    }) 
    .fail(function() { 
    alert("error"); 
    }) 
    .always(function() { 
    alert("complete"); 
    }); 

jqxhr.always(function() { 
    alert("second complete"); 
}) 
0

像其他人一樣說,同步XMLHttpRequest的線程是棄用

我認爲你正在避免異步,因爲你可能會等待電話完成,然後做別的事情。你也可以使用一個回調像.done

$.ajax({ 
    url: "testOperation.php", 
    data: compareHeure, 
    success: function (data, statusRequest) { 
    } 
}).done(function(data){ 
    // Do another Ajax or something with the data returned from the Ajax call 
}) 
0

同步AJAX調用已被棄用,因爲它們可能會產生頁面內容加載的一些問題。

它也可能導致可視化設計失真,所以使用同步AJAX不是好習慣,它可能在將來不可用。

0

檢查您的AJAX調用是否設置爲false(async:false)explictly(默認值爲true - 哪種方式是正確的),如果不是,那麼您的瀏覽器上可能會運行一些擴展做同步回撥。簡單的識別方法是在Chrome中打開控制檯,啓用「Log XMLHttpRequests」,您將能夠看到導致問題報告的擴展名。希望這可以幫助。