【问题标题】:How to convert from JSON to JSONP?如何从 JSON 转换为 JSONP?
【发布时间】:2012-08-24 09:28:43
【问题描述】:

我编写了以下代码以将 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;
....................
}

【问题讨论】:

标签: java jquery json jsonp


【解决方案1】:

由于您使用的是 jQuery 并且您控制服务器端,因此请更改您的服务器代码,以便它查找 callback 参数。此参数的值将是客户端代码所期望的回调函数的名称。然后不要返回裸 JSON,而是以以下形式返回它:callbackName(rawJson)

例如,假设一个 servlet 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();

然后在客户端,继续使用jQuery.getJSON,但将?callback=? 查询参数附加到您的URL,或者使用jQuery.ajax 进行调用,并使用dataType: jsonp 设置。

【讨论】:

    猜你喜欢
    • 2017-05-08
    • 2013-08-19
    • 2012-12-25
    • 2015-08-29
    • 2014-04-11
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    相关资源
    最近更新 更多