我有一个简单的restful服务返回一个json。我想进行ajax调用以获取所需的数据。当我尝试使用firefox的RestClient时没有问题。服务返回json,我可以看到休息客户端上的json。但是当我使用ajax调用时它会失败。控制台显示200 OK
,但在调用后执行错误功能。我搜索了这个,通常他们说这是一个跨域问题,但我没有解决这个问题。
这是错误函数{"readyState":0,"responseText":"","status":0,"statusText":"error"}
AJAX调用
$.ajax({
type:"GET",
url: "http://localhost:8080/myController/getInfo",
dataType:"json",
success: function(data){
alert(JSON.stringify(data));
},
error: function(msg){
alert("ERROR! \n" + JSON.stringify(msg));
}
});
Firefox的控制台消息
Content-Type application/json
Date Mon, 18 Feb 2013 11:51:41 GMT
Server Apache-Coyote/1.1
Transfer-Encoding chunked
Accept application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language tr-TR,tr;q=0.8,en-US;q=0.5,en;q=0.3
Host localhost:8080
Origin null
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:18.0) Gecko/20100101 Firefox/18.0
通话中返回的数据:
{ "date": "1 hour ago", "photoUrl": "img/movie_detail/celal.jpg", "rating": "three", "title": "Celal ile Ceren" }
答案 0 :(得分:2)
您似乎违反了same origin policy restriction
,这会阻止您发送跨域AJAX调用。您已将http://localhost:8080/myController/getInfo
用作网址,但只有在包含此javascript的HTML网页由http://localhost:8080/
提供时才会生效。否则,浏览器不允许您执行此AJAX调用。
作为一种可能的解决方法,您可以修改REST服务,使其除了JSON之外还支持JSONP
。然后你就可以向它发送GET请求(POST不能使用jQuery的JSONP实现,因为它使用了<script>
标记)。
答案 1 :(得分:0)
您可以将CORS用于此目的。
示例代码:
jQuery.support.cors = true;
function CrosDom_ajax(url) {
if (window.XDomainRequest
&& $.browser.msie
&& $.browser.version < 10) {
xdr = new XDomainRequest();
if (xdr) {
xdr.onload = function () {
alert(xdr.responseText);
};
xdr.open("get", url);
xdr.send();
}
}
else {
$.ajax({
url: url,
success: function (response) {
},
error: function (data) {
}
});
}
}
您还需要在服务器端编写以下代码,以允许跨域访问
Response.AppendHeader("Access-Control-Allow-Origin", "*");