JS代码
<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script>
$.getJSON("http://localhost:8080/gbsshop/rest/auth/test/xyz?callback=?", function (data) {
alert("52");
});
</script>
</head>
</html>
REST Easy方法
@GET
@POST
@Path("/test/{param}")
@Produces({MediaType.APPLICATION_JSON })
public String returnMessage(@PathParam("param") String msg) {
System.out.println("~~~~~~~~~~~~~"+msg+"~~~~~~~~~~~~");
return "HEllo "+msg;
}
我看到服务器获得了调用,但浏览器失败并显示“Uncaught SyntaxError:Unexpected Identifier”
感谢任何帮助。谢谢您的时间。
答案 0 :(得分:2)
在3.x版本中开箱即用claims to support JSONP:
如果你正在使用杰克逊,Resteasy有你可以打开的JSONP 添加提供者 org.jboss.resteasy.plugins.providers.jackson.JacksonJsonpInterceptor (Jackson2JsonpInterceptor,如果您正在使用Jackson2提供商) 你的部署。如果响应的媒体类型是json和a 给出回调查询参数,响应将是一个javascript 使用回调定义的方法的方法调用的代码段 参数。例如:
GET / resources / stuff?callback = processStuffResponse会产生这个 响应:
processStuffResponse()这支持默认值 jQuery的行为。
您可以通过设置更改回调参数的名称 callbackQueryParameter属性。
然而,由于RESTEASY-1168: Jackson2JsonpInterceptor does not render closing bracket
,它似乎是borken所以
foo({"foo":"bar"}
渲染而不是
foo({"foo":"bar"})
这导致&#34; Uncaught SyntaxError:Unexpected Identifier&#34;错误
我已经修复了一个pull-request并修复了它,希望它能进入下一个版本3.0.12
我知道这个qustion很老了,但是当你搜索resteasy jsonp问题时它显示在Google的第一页上,所以我决定更新它
答案 1 :(得分:0)
注意:这是在应用程序中执行此操作的最糟糕方式,您需要检查可用的框架支持。这只是演示了如何添加jsonp支持
我不知道REST Easy,我会在这里做一个大猜测
@GET
@POST
@Path("/test/{param}")
@Produces({MediaType.APPLICATION_JSON })
public String returnMessage(@PathParam("param") String msg, @QueryParam("callback") String callback) {
System.out.println("~~~~~~~~~~~~~"+msg+"~~~~~~~~~~~~");
return callback + "({msg: \"" + msg + "\"})";
}
然后
$.getJSON("http://localhost:8080/gbsshop/rest/auth/test/xyz?callback=?", function (data) {
alert(data.msg);
});
实际上你必须同时支持json和jsonp请求,所以你可能需要
@GET
@POST
@Path("/test/{param}")
@Produces({MediaType.APPLICATION_JSON })
public String returnMessage(@PathParam("param") String msg, @QueryParam("callback") String callback) {
System.out.println("~~~~~~~~~~~~~"+msg+"~~~~~~~~~~~~");
if (callback == null || callback == "") {
return "{msg: \"" + msg + "\"}";
} else {
return callback + "({msg: \"" + msg + "\"})";
}
}