2014-05-17 95 views
-5

我需要在我的Javascript中同步調用控制器(url)。我可以用一個Ajax功能做到這一點,像這樣:JavaScript/Jquery呼叫控制器synchroneousely

$.ajax({ 
    type: 'POST', 
    url: BASE + '/publication/storeWorldCat', 
    data: data, 
    success: success, 
    dataType: dataType, 
    async:false 
}); 

我不明白,爲什麼作爲阿賈克斯是異步的定義,我應該使用一個Ajax功能與async:false參數。 $post()也是異步的。

有沒有更好的方法?

感謝您的幫助!

+0

我不明白你爲什麼會使用同步ajax調用嗎? – adeneo

+0

所以基本上你會想要一個函數'$ .jax()',默認情況下'async'設置爲false? ... – Djizeus

回答

0

看着the documentation of jQuery.ajax(報價):

默認情況下,所有的請求被髮送異步 (即此設置爲 true默認)。如果您需要 同步請求,請將此選項 設置爲false

0

誠然,AJAX stands for Asynchronous Javascript and XML這樣就不會異步發送或不使用XML作爲數據格式在Javascript中發送的任何請求應當在技術上不能稱爲一個AJAX請求。隨着JSON時下的流行,看起來像$.ajax功能是REALLY嚴重命名,因爲它允許任何數據格式。

但是很多其他的縮略詞被選爲易於發音,代價是不完全正確,我認爲我們可以忍受它。所以回答你的問題:

爲什麼jQuery團隊決定命名這個功能ajax?因爲這個首字母縮寫詞已被所有人使用,不管使用何種數據格式和「同步性」。爲什麼每個人都錯誤地使用這個縮略詞?可能是因爲爲每個數據格式創建一個新的首字母縮寫詞是沒有意義的,每次使用可選的'A'來表示它是否是異步的。

爲什麼[你]應該使用帶有async:false參數的Ajax函數,因爲Ajax按定義是異步的?

那麼,你不必:

$.sendRequest = $.ajax 

現在你可以使用一個函數在代碼中一個更好的名字。你甚至可以改變默認行爲:

$.sendRequest = function(options) { 
    if (typeof options.async === undefined) { 
    options.async = false; 
    } 
    $.ajax.apply($, arguments); 
} 
+0

謝謝你的完整答案!我現在明白了:-)非常感謝! – user3280526

+0

我看到你沒有接受任何你的問題的答案,當你滿意答案時考慮這樣做:http://stackoverflow.com/help/someone-answers – Djizeus