1

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 简单方法

@GET
    @POST
    @Path("/test/{param}")
    @Produces({MediaType.APPLICATION_JSON })
    public String returnMessage(@PathParam("param") String msg) {
        System.out.println("~~~~~~~~~~~~~"+msg+"~~~~~~~~~~~~");
        return "HEllo "+msg;

    }

我看到服务器接听电话,但浏览器失败并显示“未捕获的语法错误:意外的标识符”

任何帮助表示赞赏。谢谢你的时间。

4

2 回答 2

2

Resteasy声称在 3.x 版本中支持开箱即用的 JSONP:

如果您使用的是 Jackson,Resteasy 有 JSONP,您可以通过将提供程序 org.jboss.resteasy.plugins.providers.jackson.JacksonJsonpInterceptor(如果您使用的是 Jackson2 提供程序,则为 Jackson2JsonpInterceptor)添加到您的部署中来打开它。如果响应的媒体类型是 json 并且给出了回调查询参数,则响应将是一个 JavaScript 片段,其中包含回调参数定义的方法的方法调用。例如:

GET /resources/stuff?callback=processStuffResponse 将产生这个响应:

processStuffResponse() 这支持 jQuery 的默认行为。

您可以通过设置 callbackQueryParameter 属性来更改回调参数的名称。

但是,由于 RESTEASY-1168,它似乎很糟糕:Jackson2JsonpInterceptor does not render closing bracket

所以 foo({"foo":"bar"} 被渲染而不是 foo({"foo":"bar"})

这会导致“Uncaught SyntaxError:Unexpected Identifier”错误

我已经提交了一个带有修复的拉取请求,希望它应该进入下一个版本 3.0.12

我知道这个问题很老了,但是当你搜索resteasy jsonp问题时它显示在谷歌的第一页,所以我决定更新它

于 2015-04-07T05:52:39.627 回答
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 + "\"})";
    }
}
于 2013-03-27T04:03:25.137 回答