在js中,我們直接用XMLHttpRequest請(qǐng)求不同域上的數(shù)據(jù)時(shí)辙浑,是不可以的。但是拟糕,在頁(yè)面上引入不同域上的js腳本文件卻是可以的判呕,jsonp正是利用這個(gè)特性來(lái)實(shí)現(xiàn)的。
// 封裝一個(gè)方法
function(){
var jsonp = function(url, data, callback){
// 1.判斷url中是否帶有參數(shù)
var dataString = url.indexof('?') == -1? '?': '&';
// 2.把參數(shù)拼接起來(lái)
for(var key in data){
dataString += key + '=' + data[key] + '&';
};
// 3.創(chuàng)建script標(biāo)簽
var scriptEle = document.createElement('script');
scriptEle.src = url + dataString;
// 4.掛載回調(diào)函數(shù)
window[cbFuncName] = function (data) {
callback(data);
// 處理完回調(diào)函數(shù)的數(shù)據(jù)之后送滞,刪除jsonp的script標(biāo)簽
document.body.removeChild(scriptEle);
}
// 5. append到頁(yè)面中
document.body.appendChild(scriptEle);
}
}(window,document)