JSONPの活動原理

2138 ワード

実はJsonpはとても簡単なものです.
主にタグを利用したjavascriptドキュメントの動的解析によって実現されます.(実は、エヴァ関数を使ってもいいです.)
 
超簡単な例を紹介します.
まずクライアントのコードを用意します.
 
Htmlコード
  • >  
  • <) xmlns="http://www.w3.org/1999/xhtml「 >  
  •   
  •     Test Jsonp  
  •     <スクリプト type=「text/javascript」  
  •             機能 jsopCallback(reult)  
  •             {  
  •             alert(result.msg)  
  •             }   
  •           
  •     <スクリプト type=「text/javascript」 src="http://crossdomain.com/jsonServerResponse?jsonp=jsonpCallback">  
  •   
  •   
  •   
  •    
  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    
    <head>
    
    <title>Test Jsonp</title>
    
    <script type="text/javascript">
    
    function jsonpCallback(result)
    
    {
    
    alert(result.msg);
    
    }
    
    </script>
    
    <script type="text/javascript" src="http://crossdomain.com/jsonServerResponse?jsonp=jsonpCallback"></script>
    
    </head>
    
    <body>
    
    </body>
    
    </html> 
     
    このうち、Json Callbackはクライアントが登録し、ドメインサーバ上のjsonデータを取得した後、コールバックの関数です.
    http://crossdomain.com/jsonServerResponse?jsonp=jsonpCallback
    このurlはドメインサーバをまたいでjsonデータを取るインターフェースで、パラメータはコールバック関数の名前で、戻りのフォーマットは
     
    Jsコード
  • jsonpCallback({msg:'this) is Json data  
  • jsonpCallback({msg:'this is json data'})
     
    Jsonpの原理:
    まずクライアントにcalbackを登録して、calbackの名前をサーバーに伝えます.
     
    この時、サーバーさんはjsonデータになります. 
    そしてjavascript文法の方式で、一つのfunctionを生成します.functionの名前は伝達されたパラメータjsonです.
     
    最後に、jsonデータを直接に入力して、functionに置いて、js文法の文書を作成して、クライアントに返します.
     
    クライアントブラウザで、scriptタグを解析して、リターンされたjavascriptドキュメントを実行します.この時、データはパラメータとして、クライアントがあらかじめ定義したcalback関数に入ってきました.