パッケージJSONP
3539 ワード
私たちはよくJSドメインをまたぐ問題に遭遇します.ドメインをまたぐ解決策はたくさんあります.JSONPは非常によく使われるドメインをまたぐ解決策です.ここではJSONPをカプセル化しました.
サーバ側コード:
注:サーバー側コードは、関数名に括弧を付けた形式でなければなりません.括弧の中にJSON形式のデータが入っています.
function getJSONP(url, callback) {
if (!url) {
return;
}
var a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']; //
var r1 = Math.floor(Math.random() * 10);
var r2 = Math.floor(Math.random() * 10);
var r3 = Math.floor(Math.random() * 10);
var name = 'getJSONP' + a[r1] + a[r2] + a[r3];
var cbname = 'getJSONP.' + name; // jsonp
if (url.indexOf('?') === -1) {
url += '?jsonp=' + cbname;
} else {
url += '&jsonp=' + cbname;
}
var script = document.createElement('script');
//
getJSONP[name] = function (e) {
try {
//alert(e.name);
callback && callback(e);
} catch (e) {
//
}
finally {
// script
delete getJSOP[name];
script.parentNode.removeChild(script);
}
}
script.src = url;
document.getElementsByTagName('head')[0].appendChild(script);
}
getJSONP('http://localhost:8888/',function(response){
alert(response.name);
});
サーバ側コード:
<?php
echo $_GET['jsonp']."({name:'Hi,Kingwell,I come from China',age:20})";
?>
注:サーバー側コードは、関数名に括弧を付けた形式でなければなりません.括弧の中にJSON形式のデータが入っています.