這個問題肯定可以應用到jQuery,但在這種情況下,我指的是Prototype。在原型文檔,它說,使用同步ajax調用有什麼缺點?
由於同步使用是相當 不安,通常口感不好,你 應避免更改此。認真。
我不確定使用同步ajax調用的缺點是什麼。看起來有許多實例必須等待調用返回(不使用特定的回調函數)。例如,我目前使用Prototype的onSuccess, onFailure and onComplete
來處理其餘的代碼。
但是,我使用的Web服務(全部內部)跨越了大多數項目,並且我的任務是創建更多可重用代碼。一個例子是返回客戶屬性的客戶類。一個簡單的例子(記住,我只顯示保持簡單的基本功能):
Customer = Class.create({
initialize: function(customerId) {
new Ajax.Request('some-url', {
method: 'get',
parameters: {
customerId: customerId
},
onSuccess: this.setCustomerInfo.bind(this)
}
},
setCustomerInfo: function(response) {
//for the sake of this example I will leave out the JSON validation
this.customerInfo = response.responseText.evalJSON();
}
});
因此,使用簡單的類我可以做以下的任何項目,以獲得客戶信息。
var customer = new Customer(1);
//now I have the customer info
document.write(customer.customerInfo.firstName);
使用上面的代碼不會打印出客戶的名字。這是由於ajax調用是異步的。無論Web服務是否帶回客戶數據,它都會執行document.write
。但我不想做任何事情,直到數據恢復並設置了客戶變量。爲了解決這個問題,我將ajax調用設置爲同步,以便瀏覽器在new Customer(1);
完成之前不會繼續。
此方法似乎可行(將異步設置爲false),但閱讀Prototype文檔讓我暫停。使用這種方法有什麼缺點?還有另一種方法可以做到,效率更高嗎?
我會很感激任何反饋意見。
然後我也會對此表示不滿,並學習更好的代碼:) – traviss0