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;

    }

サーバーは呼び出しを受け取りますが、ブラウザーは「Uncaught SyntaxError: Unexpected Identifier」で失敗します。

どんな助けでも大歓迎です。時間をありがとう。

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 は閉じ括弧をレンダリングしないため、壊れているようです。

foo({"foo":"bar"} の代わりにレンダリングされ ます foo({"foo":"bar"})

そして、「Uncaught SyntaxError: Unexpected Identifier」エラーが発生します

修正を含むプルリクエストを送信しました。うまくいけば、次のリリース 3.0.12 に含まれるはずです。

この質問はかなり古いことは承知していますが、Google で resteasy jsonp problem を検索すると最初のページに表示されるので、更新することにしました。

于 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 に答える