像很多網(wǎng)站一樣,我們也可能需要從不同的域名獲取數(shù)據(jù)。但是,由于瀏覽器的同源策略,我們無法直接訪問從其他域名獲取的數(shù)據(jù)。使用jQuery的Ajax可以幫我們解決這個問題。
jQuery的Ajax跨域請求需要在服務(wù)器上進行一些設(shè)置。我們可以在客戶端使用以下代碼發(fā)送跨域請求:
$.ajax({ url: 'http://example.com/data.json', dataType: 'jsonp', success: function(data) { console.log(data); } });
在服務(wù)器端,我們需要在響應(yīng)頭中添加以下代碼:
Access-Control-Allow-Origin: *
這將允許我們的網(wǎng)頁從任何域名獲取數(shù)據(jù)。在PHP中,我們可以這樣實現(xiàn):
header('Access-Control-Allow-Origin: *');
當我們發(fā)送跨域請求時,jQuery將使用JSONP技術(shù)代替標準Ajax。這將創(chuàng)建一個用于裝載數(shù)據(jù)的script標簽,并添加一個callback參數(shù)。服務(wù)器返回一個JavaScript函數(shù)調(diào)用,其中的數(shù)據(jù)作為參數(shù)傳遞給回調(diào)函數(shù)。我們可以這樣設(shè)置JSONP回調(diào)函數(shù)的名稱:
$.ajax({ url: 'http://example.com/data.json', dataType: 'jsonp', jsonpCallback: 'myCallback', success: function(data) { console.log(data); } });
當我們發(fā)送請求時,jQuery將使用myCallback作為回調(diào)函數(shù)的名稱。服務(wù)器應(yīng)該返回以下JavaScript代碼:
myCallback({"name": "John", "age": 30});
這將調(diào)用myCallback函數(shù),并傳遞一個對象作為參數(shù)。我們可以在myCallback函數(shù)中處理返回的數(shù)據(jù)。