3 回答

TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊
回調(diào)非常簡(jiǎn)單又漂亮!由于AJAX調(diào)用的性質(zhì),您不會(huì)阻塞腳本的執(zhí)行,直到您的請(qǐng)求結(jié)束(然后它將是同步的)?;卣{(diào)只是一種指定用于在響應(yīng)返回到您的方法后處理響應(yīng)的方法。
由于javascript方法是一流的對(duì)象,因此可以像變量一樣傳遞它們。
所以在你的例子中
getText = function(url, callback) // How can I use this callback?
{
var request = new XMLHttpRequest();
request.onreadystatechange = function()
{
if (request.readyState == 4 && request.status == 200)
{
callback(request.responseText); // Another callback here
}
};
request.open('GET', url);
request.send();
}
function mycallback(data) {
alert(data);
}
getText('somephpfile.php', mycallback); //passing mycallback as a method
如果執(zhí)行上述操作,則意味著您mycallback作為處理響應(yīng)(回調(diào))的方法傳遞。
編輯
盡管此處的示例并未說明回調(diào)的適當(dāng)好處(畢竟您可以簡(jiǎn)單地將警報(bào)放在onReadyStateChange函數(shù)中?。?,但是重用性無疑是一個(gè)因素。
您必須記住,這里重要的是JS方法是一流的對(duì)象。這意味著您可以像傳遞對(duì)象一樣傳遞它們并將它們附加到各種事件上。事件觸發(fā)時(shí),將調(diào)用附加到這些事件的方法。
當(dāng)您執(zhí)行此操作時(shí),request.onreadystatechange = function(){}您只是在觸發(fā)適當(dāng)?shù)氖录r(shí)分配要調(diào)用的方法。
因此,這里很酷的事情是這些方法可以重用。假設(shè)您有一個(gè)錯(cuò)誤處理方法,當(dāng)AJAX請(qǐng)求中為404時(shí),該方法會(huì)彈出警報(bào)并填充HTML頁面中的某些字段。
如果您無法分配回調(diào)或?qū)⒎椒ㄗ鳛閰?shù)傳遞,則必須一遍又一遍地編寫錯(cuò)誤處理代碼,而要做的只是將其分配為回調(diào),所有錯(cuò)誤處理將被排序一氣呵成。
添加回答
舉報(bào)