gpt4 book ai didi

apache - 通过基于域名的 URL 访问 Java Spring 服务时,jQuery .ajax 调用返回错误

转载 作者:搜寻专家 更新时间:2023-10-31 22:49:07 26 4
gpt4 key购买 nike

我的应用程序的 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 服务已成功调用,但客户端似乎没有收到数据!

如果我点击 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

谁能告诉我这里有什么问题?非常感谢!

我设法解决了问题:

浏览器在调用 .ajax 时出错,因为我的 URL 中有端口号。当我从我的 QA URL 创建“实时”URL 时,端口号被继承。当我从 .ajax 调用的 URL 中删除端口号时,调用开始返回成功!

Jason Foglia,您的陈述“......还有港口......”促使我探索这个角度......非常感谢!

最佳答案

您可能会遇到错误,因为称为“同源策略”的安全概念不允许您调用来自不同域的服务。或者至少,禁止您调用该服务中的方法。

在这里可以找到相同的讨论 - AJAX Cross Domain

但是您可以使用 JSONP 实现跨域 - Wikipedia on JSONP

解决方案是将数据类型更改为 JSONP:

$.ajax({
url:"http://www.smartcloudlearning.mobi:9080/SmartCloudLearningMobi...",
dataType: 'jsonp',
...
});

关于apache - 通过基于域名的 URL 访问 Java Spring 服务时,jQuery .ajax 调用返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10181867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com