如何进行跨域Ajax调用

5

我有一个API,它是一个JSP文件,并且以JSON格式呈现。我正在尝试从JSP页面中获取这些数据到PHP脚本中进行处理,然后存储在我的MySQL服务器中。

我在几个在线的JSON格式化和验证器中检查了JSP页面中的JSON字符串是有效的。

这是我用来从页面获取JSON数据的代码,但是每次我的ajax调用都失败了。

$('#button').click(function(e){
var url = 'http://xxxxx:8080/StudentAPI/index.jsp';
$.ajax({
    url : url,
    dataType : 'json',
    success : function(response) {
        alert('Success');
    },
    error : function(request, textStatus, errorThrown) {
        alert(request+textStatus+errorThrown);
    }
});
e.preventDefault();
})

请帮我翻译,任何改进方式的建议都非常受欢迎。


1
这是一个跨域问题。 - Mithun Satheesh
@mithunsatheesh:那我有什么替代方案呢? - NewUser
1个回答

3
您正在进行跨域ajax调用。因此,如果您像普通的ajax调用一样尝试它,它将无法正常工作。
一种方法是:
  1. 在您发起ajax请求的服务器端将“Access-Control-Allow-Origin”设置为“*”。
  2. 然后,在设置变量中使用“crossDomain”属性“true”进行jquery ajax调用。
另一种方法是使用jsonp
根据您使用的服务器,您可以在本文中找到如何添加cors的方法。

更新

这里有w3c文章描述了如何在Java servlets中配置cors。请参见在Java servlets中部分。
重点是,提供ajax响应的服务器在响应头中应该设置"Access-Control-Allow-Origin"字段为"*"

如何设置访问控制允许来源?我应该在哪里设置?您能详细说明吗? - NewUser
Tomcat服务器中的JSP文件,我按照第一篇文章提到的方法检查了.conf文件,但是没有找到任何conf文件... :( 我需要在放置PHP文件的服务器上进行设置吗? - NewUser
不需要返回翻译后的文本。它应该在目标服务器或Ajax调用的页面上。在你的情况下,我相信是Tomcat上的JSP页面。PHP与此问题无关。你甚至可以在服务器上创建一个纯HTML页面,并从中发起Ajax调用。 - Mithun Satheesh
你有看过w3c的文章吗?我相信你可以像这样做: response.addHeader("Access-Control-Allow-Origin", "*");.. 如果我错了,请原谅,因为我对Java不够熟悉。 - Mithun Satheesh
为了网络连接挣扎了一段时间 :(.. 是的,我已经编写了response.addHeader.. 但我的问题仍然存在.. - NewUser
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接