パッケージJSONP

3539 ワード

私たちはよくJSドメインをまたぐ問題に遭遇します.ドメインをまたぐ解決策はたくさんあります.JSONPは非常によく使われるドメインをまたぐ解決策です.ここではJSONPをカプセル化しました.
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形式のデータが入っています.