5

JSONデータをフロントエンドに送信するために、次のようにコーディングしました。しかし、クロスドメインのセキュリティ上の問題のため、JSONPに変換する必要があります。誰かが、この変換のために何を変更する必要があるかを提案できますか?

サーバー側コード

JsonFactory jfactory = new JsonFactory();
         ObjectMapper mapper = new ObjectMapper();
         try {
                StringWriter stringWriter = new StringWriter();
                JsonGenerator jGenerator = jfactory.createJsonGenerator(stringWriter);
                jGenerator.useDefaultPrettyPrinter();
                jGenerator.writeStartObject(); // {
                jGenerator.writeStringField("title", title); // "title" : title
                jGenerator.writeStringField("Description", desc); // "desc" :
                jGenerator.writeFieldName("images");
                jGenerator.writeStartArray(); // [
                if(imageArray.size() != 0){
                for (String img : imageArray) {
                    jGenerator.writeString(img); // "msg 1"
                }
                }
                jGenerator.writeEndArray(); // ]
                jGenerator.writeEndObject(); // }
                jGenerator.close();
                response.getWriter().write(stringWriter.toString());
                System.out.println(stringWriter.toString());
                response.getWriter().close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println("JasonGen servlet called end");

フロントエンドJavascript:

$.getJSON("http://localhost:8080/JsoupPrj/JasonGen?url="+ url[0],function(data){
                var imageArray=[];
                var imageOne = null;
                    imageArray=data.images;
....................
}
4

1 に答える 1

5

callbackjQueryを使用していてサーバー側を制御しているため、パラメーターを検索するようにサーバーコードを変更します。このパラメーターの値は、クライアント側のコードが予期しているコールバック関数の名前になります。次に、ベアJSONを返す代わりに、次の形式で返しますcallbackName(rawJson)

たとえば、サーブレットAPIを想定すると、次のようになります。

String callbackName = request.getParameter("callback");

// ... your JSON code 

if (callbackName != null)
{
    // JSONP wrapping:
    response.getWriter().write(callbackName +
                               "(" + stringWriter.toString() + ")");
    System.out.println(callbackName + "(" + stringWriter.toString() + ")");
}
else
{
    response.getWriter().write(stringWriter.toString());
    System.out.println(stringWriter.toString());
}

response.getWriter().close();

次に、クライアント側で引き続き使用しますが、URLにクエリパラメータをjQuery.getJSON追加するか、代わりに呼び出しに使用して、設定を使用します。?callback=?jQuery.ajaxdataType: jsonp

于 2012-08-29T17:50:16.933 に答える