我的应用程序的 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 :: <TOP_LEVEL> :: 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 创建“实时” URL 时,端口号被转移。当我从 .ajax 调用的 URL 中删除端口号时,调用开始返回成功!
Jason Foglia,你的陈述“......还有港口......”促使我探索那个角度......非常感谢!