検索
ホームページウェブフロントエンドjsチュートリアルAjax クロスドメインリクエストの使用方法

今回は、Ajax クロスドメイン リクエストの使用方法と、Ajax クロスドメイン リクエストを使用する際の 注意事項 について説明します。以下は実際的なケースです。

この記事では、クロスドメインの問題に遭遇したが、それがクロスドメインの問題であるとは知らず、その後、それがクロスドメインの問題であることは知っていたが、それを解決する方法がわからなかった初心者の話をします。次に、クロスドメインの問題を解決し、最終的に、Ajax のクロスドメイン問題を解決する 2 つの方法を見つけました。

クロスドメインの問題かどうかはわかりません

その理由は、再利用と繰り返しの開発を減らすために、別のユーザー

権限管理システムを開発して、他のユーザーから認証と認可情報を取得するためです。とりあえずシステム A と呼び、例としてシステム B を使用します。システムBでは、ajaxを使用してシステムAのインターフェースを呼び出しました(データ形式はjsonです)。システムAの対応するURLにアクセスすると、通常はjsonデータが返されますが、同じものをリクエストするにはajaxを使用しました。システム B の URL は少し混乱します。何もなかったかのように、子供からの反応はありませんでした。このような変更を長い間繰り返しましたが、それでも解決できなかったので、同僚に助けを求め、ajax のクロスドメインの問題である可能性があることを思い出させたので、問題をクロスドメインの問題として解決しました。

クロスドメインについては知っているが、その解決方法がわからない

問題の正確な原因がわかったら、残っているのは問題の解決策を見つけることだけです。私は長い間グーグルで検索しましたが、再び同僚の指導のもと、jQuery の ajax には、クロスドメインの問題を解決するために使用できる jsonp などの属性があることを知りました。

解決策を見つける

これで、クロスドメインの問題を解決する方法がわかりました。残りは実装の詳細です。導入プロセスではエラーが避けられません。 json と jsonp の 2 つの形式の違いが理解できなかったので、Google で解決するのに時間がかかりました。

まず、jQuery の ajax を使用してページ上のクロスドメインの問題を解決する方法の簡単なバージョンを見てみましょう:

$(document).ready(function(){
var url='http://localhost:8080/WorkGroupManagment/open/getGroupById"
+"?id=1&callback=?';
$.ajax({
url:url,
dataType:'jsonp',
processData: false, 
type:'get',
success:function(data){
alert(data.name);
},
error:function(XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
}});
});
このように記述しても問題ありません。最初は、エラー処理関数は単なるアラートです。 (「エラー」) エラーの原因をさらに特定するために、処理関数を上記の実装に変更します。アラートの最後の行は parsererror として使用されます。私は困惑したので、グーグルで検索を続け、最終的に万能のスタックオーバーフローで答えを見つけました。リンクはここにあります。その理由は、jsonp の形式が json 形式と少し異なるため、サーバー側のコードが少し異なるためです。

json形式とjsonp形式の違いを比較してください:

json形式:

{
"message":"获取成功",
"state":"1",
"result":{"name":"工作组1","id":1,"description":"11"}
}

jsonp形式:

callback({
"message":"获取成功",
"state":"1",
"result":{"name":"工作组1","id":1,"description":"11"}
})
バックグラウンドに渡されるURLのコールバックのパラメータで違いがわかります。 Shenma callback は驚くべきことに、jsonp には json よりも 1 つ多くの層 callback() があります。それで、あなたはそれに対処する方法を知っています。したがって、背景コードを変更します。

最終的なバックグラウンド Java コードは次のとおりです:

@RequestMapping(value = "/getGroupById")
public String getGroupById(@RequestParam("id") Long id,
HttpServletRequest request, HttpServletResponse response)
throws IOException {
String callback = request.getParameter("callback");
ReturnObject result = null;
Group group = null;
try {
group = groupService.getGroupById(id);
result = new ReturnObject(group, "获取成功", Constants.RESULT_SUCCESS);
} catch (BusinessException e) {
e.printStackTrace();
result = new ReturnObject(group, "获取失败", Constants.RESULT_FAILED);
}
String json = JsonConverter.bean2Json(result);
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.print(callback + "(" + json + ")");
return null;
}
まずクエリ結果を json 形式に変換し、次にパラメーター コールバックを使用して json の外側に別のレイヤーを追加して jsonp にする必要があることに注意してください。

データ型をjsonpとして指定するAjaxは、さらなる処理に使用できます。

これでクロスドメインの問題は解決しましたが、パーサーエラーの原因を確認してみましょう。その理由は、json 形式のデータを ajax が処理するために盲目的に jsonp 形式のデータとして扱うため、このエラーが発生するためです。 このとき、サーバー側のコードは次のようになります。

@RequestMapping(value = "/getGroupById")
@ResponseBody
public ReturnObject getGroupById(@RequestParam("id") Long id,
HttpServletRequest request, HttpServletResponse response){
String callback = request.getParameter("callback");
ReturnObject result = null;
Group group = null;
try {
group = groupService.getGroupById(id);
result = new ReturnObject(group, "获取成功", Constants.RESULT_SUCCESS);
} catch (BusinessException e) {
e.printStackTrace();
result = new ReturnObject(group, "获取失败", Constants.RESULT_FAILED);
}
return result;
}
さて、ajax クロスドメインを解決する最初の方法です。問題は終わります。

解決策を追加

Google での検索の過程で、クロスドメインの問題を解決するために特別に設計された jQuery プラグイン、jquery-jsonp を偶然発見しました。

最初の方法の基礎により、jsonp プラグインを使用するのは比較的簡単で、サーバー側のコードを変更する必要はありません。

jquery-jsonp プラグインを使用してクロスドメインの問題を解決する方法を見てみましょう。

var url="http://localhost:8080/WorkGroupManagment/open/getGroupById"
+"?id=1&callback=?";
$.jsonp({
"url": url,
"success": function(data) {
$("#current-group").text("当前工作组:"+data.result.name);
},
"error": function(d,msg) {
alert("Could not find user "+msg);
}
});
ここまで、クロスドメインの問題を解決する 2 つの方法を紹介しました。

補足: Ajax のクロスドメイン問題には 3 つの解決策があります:

1. 中間遷移層を通じてクロスドメイン問題を解決します

(1) Web プロキシ サーバーを介して異なるドメインのアプリケーションを統合します。分離されているため、すべてのアプリケーションは 1 つのドメイン名の下にあります。 (Apache、nginxなど)

(2)跨域的安全限制都是指浏览器端来说的.服务器端是不存在跨域安全限制的,所以通过本机服务器端通过类似httpclient方式完成“跨域访问”的工作。

2.通过<script>标签解决跨域问题</script>

注意:凡是拥有"src"这个属性的标签都拥有跨域的能力,比如<script>、<img alt="Ajax クロスドメインリクエストの使用方法" >、<iframe></script>

示例:

前台脚本:

<script> 
var flightHandler = function(data){ 
alert(&#39;你查询的航班结果是:票价 &#39; + data.price + &#39; 元,&#39; + &#39;余票 &#39; + data.tickets + &#39; 张。&#39;); 
}; 
var url = "http://abc.com:8080/AjaxCrossDomain/data/data.jsp?code=CA1998&callback=flightHandler"; 
var script = document.createElement(&#39;script&#39;); 
script.setAttribute(&#39;src&#39;, url); 
document.getElementsByTagName(&#39;head&#39;)[0].appendChild(script); 
</script>

后台data.jsp内容:

 

使用jquery的jsonp来实现跨域访问,例子如下:

<script> 
$(function(){ 
$.ajax({ 
type: "get", 
async: false, 
url: "http://abc.com:8080/AjaxCrossDomain/jsonp/data.jsp", 
dataType: "jsonp", 
jsonp: "callback", 
jsonpCallback:"flightHandler", 
success: function(json){ 
alert(&#39;您查询到航班信息:票价: &#39; + json.price + &#39; 元,余票: &#39; + json.tickets + &#39; 张。&#39;); 
}, 
error: function(){ 
alert(&#39;fail&#39;); 
} 
}); 
}); 
</script>

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

HTML5+ajax怎么做出预览图片效果

怎么实现不刷新的Ajax分页

以上がAjax クロスドメインリクエストの使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScriptとWeb:コア機能とユースケースJavaScriptとWeb:コア機能とユースケースApr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Python vs. JavaScript:コミュニティ、ライブラリ、リソースPython vs. JavaScript:コミュニティ、ライブラリ、リソースApr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール