ホームページ >ウェブフロントエンド >jsチュートリアル >Javascriptクロスドメインリクエストコードの実装方法の詳細説明
どのような状況でクロスドメイン が発生しますか?
ドメイン名が http://www.php.cn であるとします。
要求されたドメイン名がこのドメイン名と異なる場合、この状況はクロスドメインです。クロスドメインには抜け穴があるため、一般的に、通常のクロスドメインリクエスト方式ではリクエストできません。
解決策:
1. window.name
1. サーバーは
<script>window.name='{"id":"3", "name":"leisure"}';</script>
を返します。2. iframe を定義し、onload イベントa8d03127d746a409cd95a10968b8208dd5ba1642137c3f32f4f4493ae923989c を追加します。
<script type="text/javascript"> var load = false; function iLoad() { if(load == false) { // 同域处理,请求后会再次重新加载iframe document.getElementById('iframe1').contentWindow.location = '/'; load = true; } else { // 获取window.name的内容,注意必须进行同域处理后方可访问! var data = document.getElementById('iframe1').contentWindow.name; alert(data); // {"id":"3", "name":"leisure"} load = false; } } </script>
3. フォームを定義し、フォームのターゲットを iframe の ID に設定して、フォームを送信します
<form action="url" method="POST" target="iframe1"> <button type="submit" value="submit" /> </form>
2. サーバーは callback({"id": "3", " name": "leisure"}); <script type="text/javascript">
function callback(data) {
alert(data);
}
</script>
<script type="text/javascript" src="http://www.php.cn/product.jsp?id=5&jsonp=callback"></script>
サーバーは json 形式のデータ test({"id": "3", "name": "leisure") を返しますテスト関数名 コールバック パラメーターで $.getJSON(url + "?callback=?", data, function(data) {
}
を定義します。jquery は疑問符を置き換える関数名を自動的に生成する必要があることに注意してください。 jQuery.getJSON は実際には JSONP を使用して実装されます。
4. Flash クロスドメイン
crossdomain.xml をサーバーに追加します http://www.php.cn/crossdomain.xml
<?xml version="1.0"?> <cross-domain-policy> <allow-access-from domain="*.another.com.cn" /> </cross-domain-policy>
以上がJavascriptクロスドメインリクエストコードの実装方法の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。