シーン
b.com/b_return_js.phpインターフェイスに、A.comとB.comの異なるドメイン名を持つ2つのサーバーがある場合、一部のデータを取得できます。もちろん、B.comページにある場合は、AJAXを使用してこのインターフェイスを直接リクエストできますが、A.Comページで要求された場合はどうなりますか。
b_return_js.phpのインターフェイスコード:
コードコピーは次のとおりです。
$ a = array(
array( 'username' => 'tony'、 'age' => 25)、
array( 'username' => 'yimeng'、 'age' => 23)、
array( 'username' => 'ermeng'、 'age' => 22)、
array( 'username' => 'sanmeng'、 'age' => 21)、
);
シャッフル($ a);
echo 'var userdata =' .json_encode($ a)。 ';'; //一般的に、それがB.comからのサイトリクエストである場合、JSON_ENCODE($ a)を直接返します。ただし、SRC属性を使用してクロスドメインを達成する場合は、このデータをJS変数に割り当てて、このデータをスクリプトタグで読み込んだページで取得および使用できるようにする必要があります。
簡単な実装
A.comの下のページに直接行く簡単な方法があります
コードコピーは次のとおりです。
<スクリプトsrc = "http://b.com/b_return_js.php"> </script>
このようにして、このインターフェイスで返されるデータは、A.Comページから直接取得できます。
しかし、ここには欠陥があります。このデータは、ページがロードされたときにのみ取得できます。 AJAXを使用したい場合、いつでも新しいインターフェイスデータを取得できる方法はあまり適していません。たとえば、ボタンをクリックしてこのインターフェイスから部分的に更新されたデータを取得すると、この方法はやや不適切です。
クラスAJAX実装
実際、上記のAjaxクラスを実装するという考え方は、Ajax条件がトリガーされたときに上記のタグを再生して、再びインターフェイスからデータを取得することです。しかし、実際には、実装することはまだ少し難しいです(少なくとも私には多くの努力が必要でした)。
コード:
a.com/scriptsrc.phpページの下にボタンがある場合
<入力型= "button" id = "ajax_request_from_b" value = "request from b.com"/>
クリックするたびに、ajax実装コードと同様に、b.com/b_return_js.phpインターフェイスからデータが取得されます。
コードコピーは次のとおりです。
function createScript()
{
//CONSOLE.LOG(ELE);
ELE.SRC = 'http://b.com/b_return_js.php';
ELE.TYPE = 'Text/JavaScript';
ELE.LANGUAGE = 'JavaScript';
}
関数getData()
{
console.log(userData);
}
$( '#ajax_request_from_b')。クリック(function(){
//スクリプトタグを毎回リロードする必要があるため、クロスドメインサーバーからデータを取得できるように、毎回新しいスクリプトタグを再生する必要があります。
if(ele && ele.parentnode)
{
//ELE.PARENTNODE.REMOVECHILD(ELE); //この種の削除はメモリからELEを完全に削除することはできませんが、DOMの場所のみを削除することはできません
for(varプロパティ){
ELE [プロパティ]を削除します。 //完全に削除します
}
}
ele = document.createelement( 'script'); //これは新しいELEです
createScript();
document.getElementsByTagname( "head")[0] .AppendChild(ELE);
ele.onload = function(){getData()}; //スクリプト要素がロードされた後、ユーザーDataを取得できます。ユーザー情報がランダムな順序で取得されるたびに。
});
このようにして、ボタンをクリックするたびにインターフェイスからデータが再び取得され、効果はAjaxに似ていますが、これはJSのクロスドメイン方法です。少し感謝していますが、それでも考え方です。