私のアプリケーションの HTML5、jQuery Mobile フロントエンドは Java サーバー (Spring、Hibernate、MySQL) と通信します。アプリケーションは、QA 環境だけでなく、私のノートブックでも問題なく動作します。QA では、サーバーの IP アドレスを使用してアプリケーションにアクセスしています。Live 環境 (QA と同じサーバーで Tomcat の別の Web アプリ) でアプリケーションをホストし、ドメイン名の URL を使用してアプリケーションにアクセスしようとすると、アプリケーションの $.ajax 呼び出しでエラーが返されます。
呼び出しの 1 つは次のとおりです。
$.ajax({
type : "GET",
url : "http://www.smartcloudlearning.mobi:9080/SmartCloudLearningMobi/rest/resource/getResourceTypes",
cache : false,
async : false,
dataType : 'json',
success : function(rTypes) {
Alert("success!");
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
alert("An error has occurred making the request: " + errorThrown);
}
});
Firefox で次のエラーが表示されます。
An error has occurred making the request: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE)" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: http://www.smartcloudlearning.mobi/js/jquery-1.7.1.min.js :: <TOP_LEVEL> :: line 4" data: no]
Chrome で次のエラーが表示されます。
An error has occurred making the request: Error: NETWORK_ERR: XMLHttpRequest: Exception 101
サーバー ログで、要求された Spring サービスが正常に呼び出されたことがわかりますが、クライアントがデータを受信していないようです!
URLを叩いたら
http://www.smartcloudlearning.mobi:9080/SmartCloudLearningMobi/rest/resource/getResourceTypes
ブラウザで直接、期待どおりの結果が得られます! これは、サーバー要求を Apache から Tomcat に転送する方法が原因であると感じています。
以下は、Apache / httpd サーバーの httpd.conf ファイルの行です。
ProxyPass /SmartCloudLearningMobi http://www.smartcloudlearning.mobi:9080/SmartCloudLearningMobi
ProxyPassReverse /SmartCloudLearningMobi http://www.smartcloudlearning.mobi:9080/SmartCloudLearningMobi
ここで何が問題なのか誰か教えてもらえますか? とても有難い!
私は問題を解決することができました:
URL にポート番号が含まれていたため、ブラウザーは .ajax 呼び出しでエラーを出していました。QA URL から「ライブ」URL を作成したときに、ポート番号が引き継がれました。.ajax 呼び出しの URL からポート番号を削除すると、呼び出しが成功を返し始めました。
ジェイソン・フォグリア、あなたの声明「...そしてポートも...」は、私にその角度を探求するよう促しました...どうもありがとう!