AJAX(Asynchronous JavaScript and XML)是一種在Web應(yīng)用中實(shí)現(xiàn)異步通信的技術(shù),它通過(guò)在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,實(shí)現(xiàn)無(wú)需刷新整個(gè)頁(yè)面的動(dòng)態(tài)更新。而JSONP(JSON with Padding)則是一種利用動(dòng)態(tài)腳本元素實(shí)現(xiàn)跨域請(qǐng)求的方式。通過(guò)了解這兩種技術(shù)的原理,我們能更好地理解它們的工作機(jī)制,并能更高效地使用它們來(lái)開(kāi)發(fā)Web應(yīng)用。
在傳統(tǒng)的AJAX調(diào)用中,我們使用的是XMLHttpRequest對(duì)象來(lái)發(fā)送異步請(qǐng)求。請(qǐng)求中的數(shù)據(jù)可以是任意格式,但通常是XML或JSON。服務(wù)器將返回所請(qǐng)求的數(shù)據(jù),我們可以在回調(diào)函數(shù)中對(duì)這些數(shù)據(jù)進(jìn)行處理。
var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { var response = JSON.parse(xhr.responseText); // 對(duì)返回的數(shù)據(jù)進(jìn)行處理 } }; xhr.open('GET', 'http://example.com/data', true); xhr.send();
然而,由于瀏覽器的同源策略,AJAX請(qǐng)求通常只能向同一域名下的資源發(fā)起,無(wú)法跨域請(qǐng)求其他域名的資源。這時(shí),JSONP就派上了用場(chǎng)。JSONP利用了動(dòng)態(tài)腳本元素`