我试图进行ajax调用从jquery到休息服务。使用的休息服务是从mkyong的博客的教程,这一个:
http://www.mkyong.com/webservices/jax-rs/integrate-jackson-with-resteasy/
服务工作,但是当我尝试从jQuery调用时,在Firebug有一个200状态代码,但在响应部分,什么也没有。
<html> <head> <script type="text/javascript" src="jquery-1.6.2.min.js"></script> </head> <body> <button id="ajax">ajax call</button> <button id="json">json</button> <script type="text/javascript"> $('#json').click(function(){ alert('json'); $.getJSON("http://localhost:8080/restws/json/product/get",function(data) { alert(data); }); }); $('#ajax').click(function(){ alert('ajax'); $.ajax({ type: "GET",dataType: "json",url: "http://localhost:8080/restws/json/product/get",success: function(data){ alert(data); } }); }); </script> </body> </html>
我不能弄清楚我出错了,你能告诉我我做错了什么?
谢谢!
解决方法
您正在从与请求的主机不同的主机运行HTML。正因为如此,你被
same origin policy阻挡了。
在JSON中,返回:
{a: 5,b: 6}
在JSONP中,JSON被包装在一个函数调用中,因此它成为一个脚本,而不是一个对象。
callback({a: 5,b: 6})
您需要编辑REST服务以接受称为回调的参数,然后使用该参数的值作为函数名称。您还应该将内容类型更改为application / javascript。
例如:http:// localhost:8080 / restws / json / product / get?callback = process应该输出:
process({a: 5,b: 6})
在JavaScript中,您需要告诉jQuery使用JSONP。要做到这一点,你需要附加?callback =?到URL。
$.getJSON("http://localhost:8080/restws/json/product/get?callback=?",function(data) { alert(data); });
如果你使用$ .ajax,它会自动附加?callback =?如果你告诉它使用jsonp。
$.ajax({ type: "GET",dataType: "jsonp",success: function(data){ alert(data); } });