我的应用程序的HTML5,jQuery Mobile前端与Java服务器(Spring,Hibernate,MySQL)进行了对话。该应用程序可以在我的笔记本以及QA环境中正常工作。在QA上,我使用服务器的IP地址访问应用程序。
当我在Live环境中托管应用程序(与QA相同的服务器,但在Tomcat中是一个不同的Web应用程序)并尝试使用具有域名的URL访问它时,应用程序中的$ .ajax调用会返回错误。
其中一个电话如下:
$.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 :: :: line 4" data: no]Chrome中出现以下错误:
An error has occurred making the request: Error: NETWORK_ERR: XMLHttpRequest: Exception 101在服务器日志中,我看到所请求的Spring服务已成功调用,但看起来客户端没有收到数据!
如果我点击了网址
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有谁能告诉我这里有什么不舒服吗?非常感激!
我设法解决了这个问题:
浏览器在.ajax调用时发生错误,因为我的URL中有端口号。当我从我的QA URL创建“实时”网址时,端口号得到了延续。当我从.ajax呼叫的URL中删除端口号时,呼叫开始返回成功!
Jason Foglia,你的陈述“......还有港口......”推动我去探索这个角度......非常感谢!