同一生成元ポリシーの制限により、XMLHttpRequest は現在のソース (ドメイン名、プロトコル、ポートを含む) からのリソースのみを要求できます。
json と jsonp の違い:
JSON はデータ交換形式ですが、JSONP は開発者によって作成された非公式のクロスドメイン データ対話プロトコルです。
script タグは、さまざまなドメインからリソースを読み込むためによく使用され、同一生成元ポリシーをバイパスできます。 (src 属性を持つ人は誰でも外部ファイルを取得できます)。
要求されたリモート データ自体が実行可能な js である場合、これらの js が実行されます (eval と同等)。
方法 1:
スクリプト タグを使用してリクエストします ()
script タグを使用してリクエストする前に、まずコールバック関数
を宣言します。
<script> function 回调函数名(data数据){ 。。。。 } </script> <script src="http://....jsp?callback=回调函数名"></script>
JSON を使用して JavaScript オブジェクトを転送するのが最も簡単な方法であり、このクロスドメイン通信方法は JSONP と呼ばれます。
リモートサーバーの文字列を結合したもの:
コールバック関数名 ({"name1":"data1","name2","data2"})
この種の JSON データはバックグラウンドで結合され、パラメータを渡すコールバック関数を使用してクライアントに返されます
(直接呼び出すこともできます。これは取得した文字列を eval 処理するのと同じです)
例: function databack(data){alert(data.name1) } // 「data1」を出力して表示します
方法 2:
外部ロードメソッドはjqueryで実装すると簡単です(ajaxの非同期リクエストメソッドと同じ)
$.ajax({ type : "get", dataType:"json", success : function(data){ alert(data.name1) }; })
または省略形
var url = "http://....jsp?callback=?"; // ここでの jquery のコールバック値は、
jquery が処理された後、成功コールバック関数を使用してデータが受け入れられます。
$.getJSON( url, function(data){alert(data.name1) });
同じオリジンのバックグラウンドでプロキシ プログラム (proxy.jsp...) をセットアップし、サーバー側の外部ドメインでサーバーと対話します。
jqueryフロントエンドデータ送信:
例:
$.get( 'http://。。。.jsp', // 代理程序地址 { name1 : "data1", name2 : "data2" }, function(data){ if(data == 1) alert('发送成功!'); } );
String data1 = request.getParameter("name1"); ........ // 此处的url为另一域下的地址并带有参数 String url = "http://.....com/.../sss.jsp?" + "name1=" + data1+ "name2=" + data2; // 跳转到另一个域进行数据的处理并返回json格式的数据 request.getRequestDispatcher(url).forward(request,response);
同じページの iframe の本文の値を取得します。
<body> <div id="show"></div> <iframe id="frame" style="display: none;"></iframe> </body> <script> $("#frame").attr("src", "路径?time=" + new Date().getTime()).load(function(){ // 获取iframe标签的值并进行获取,显示到页面 $("#show").append("[data: " + $($("#frame").get(0).contentDocument).find("body").text() + " ]"); }); </script>
WebSocket オブジェクトを作成します:
処理される主なイベント タイプは (onopen、onclose、onmessage、onerror) です。
例:
ws.onopen = function(){ console.log("open"); // 向后台发送数据 ws.send("open"); }
ws.onmessage = function(eve){ console.log(eve.data); }