我试图进行ajax调用从jquery到休息服务。使用的休息服务是从mkyong的博客的教程,这一个:
http://www.mkyong.com/webservices/jax-rs/integrate-jackson-with-resteasy/
服务工作,但是当我尝试从jQuery调用时,在Firebug有一个200状态代码,但在响应部分,什么也没有。
这里是ajax调用的html页面:
<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阻挡了。
一种方法是使用JSONP.这允许跨站点请求。
在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);
}
});