AJAX调用不适用于RESTful Web服务?

我有一个简单的restful服务,返回一个json。 我想进行ajax调用以获取所需的数据。 当我尝试使用firefox的RestClient时没有问题。 服务返回json,我可以看到rest客户端上的json。 但是当我使用ajax调用它失败了。 控制台显示200 OK ,但在调用后执行错误function。 我搜索了这个,通常他们说这是一个跨域问题,但我没有解决这个问题。

这是错误函数{"readyState":0,"responseText":"","status":0,"statusText":"error"}的失败消息{"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" } 

您似乎违反了same origin policy restriction ,这阻止您发送跨域AJAX调用。 您已将http://localhost:8080/myController/getInfo用作url,但只有在包含此javascript的HTML页面是从http://localhost:8080/时才会起作用。 否则,浏览器将不允许您执行此AJAX调用。

作为一种可能的解决方法,您可以修改您的REST服务,以便除了JSON之外它还支持JSONP 。 然后,您将能够向它发送GET请求(POST不能与jQuery的JSONP实现一起使用,因为它使用的是标记)。

您可以将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", "*");