2012-08-29 4 views
4

JSON 데이터를 프런트 엔드에 보내려면 다음 코드를 작성하십시오. 하지만 도메인 간 보안 문제로 인해 JSONP로 변환해야 할 필요가 있습니다.이 변환을 위해 수정해야 할 부분을 제안 할 수 있습니까?JSON을 (를) JSONP로 변환하는 방법은 JSON에서?

서버 측 코드

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"); 

프런트 엔드 자바 스크립트 :

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

JSON과 JSONP의 차이점을 알고 있습니까? –

+0

좋은 설명이있는 또 다른 게시물 : http://stackoverflow.com/questions/5350924/how-enable-jsonp-in-resteasy –

답변

4

당신이 jQuery를 사용하고하고, 서버 측 제어가 찾습니다 있도록 서버 코드를 변경하기 때문에 callback 매개 변수 이 매개 변수의 값은 클라이언트 측 코드에서 예상하는 콜백 함수의 이름입니다. 그런 다음 베어 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(); 

jQuery.getJSON을 계속 사용하지만 URL에 ?callback=? 쿼리 매개 변수를 추가하거나 대신 호출 jQuery.ajax을 사용하고, dataType: jsonp 설정을 사용하십시오.

+0

+1 좋은 설명 :) – Nav

관련 문제