2012-06-05 5 views
0

서버 사이드로 받고, GSON 문자열을 전송 :
자바 HttpServlet을 나는이 자바가 자바 스크립트 배열

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { 

    resp.setContentType("application/json;charset=UTF-8");   
    resp.setHeader("Cache-Control", "no-cache"); 

    PersistenceManager pm = PMF.get().getPersistenceManager(); 
    Extent<Video> extent = pm.getExtent(Video.class, false); 

    ArrayList<Video> list = new ArrayList<Video>(); 
    for (Video e : extent) { 
     list.add(e); 
    } 

    Gson gson = new Gson(); 
    String json = gson.toJson(list); 
    System.out.println(json); // As expected: [{"id":34,"title":"a title","videoUrl":"an.mp4","imageUrl":"a.jpg" etc. 
    resp.getWriter().write(json); 

    extent.closeAll(); 
    pm.close(); 

} 

클라이언트 측을 내가 가진이 자바 스크립트를 사용하여 jQuery를 :

var getAllRequest = $.ajax({ 
url: "http://localhost:8888/getAll", 
type: "GET", 
dataType: "json" 
}); 
getAllRequest.done(function(response) {   
alert (response) // THIS IS AN OBJECT ARRAY, i.e., [object Object],[object Object] etc. 
}); 

내 질문 : 응답은 실제로 json 객체이거나 json 객체의 배열입니다. jq grid를 사용하고 있으며 응답이 주어지면 그리드를 채우지 않습니다. (여기에 표시되지 않은 jq 그리드에 대한 응답 제공)

답변

1

JSON은 객체에 대한 정보를 문자열로 게시하는 방법을 제공합니다. 따라서 "json 객체"는 없습니다. 어느 쪽이든 당신은 예와 문자열을

var str = '[["a", "b"], ["c", "d"], ["e", "f"]]'; 

또는 예를

JSON의 전체 사양은 here 또는 rfc4627에 설명되어
var myObj = [["a", "b"], ["c", "d"], ["e", "f"]]; 

에 대한 개체가 같은 텍스트입니다. 따라서 매우 가까운 구문으로 JSON 문자열을 사용하여 객체를 만들 수있는 초기화 구문을 섞어서는 안됩니다. 당신이 dataType: "json" 매개 변수 $.ajax를 사용하고 서버 응답이 JSON 문자열은 내부적으로있는 jqGrid 개체에 대한 서버 응답을 변환이 포함 된 경우

이미 객체 될 done의 매개 변수 ($.parseJSON 기능 참조). 따라서

alert(response.length); 

예를 들어 getAllRequest.done 콜백 함수 내부에서 사용할 수 있습니다. 어떤 식 으로든 클라이언트는 서버 응답을 올바르게받는 것처럼 보입니다.

+0

나에게 이상한 것은 자바 사이드 프린트 문은 전송되는 것이 문자열이라는 것을 나타내지 만 클라이언트 측은 문자열이 아닌 객체 배열을 얻는다. –

+0

@normc : 제 대답을 다시 읽으십시오. 서버는 문자열을 보내야합니다. 클라이언트 측 ('$ .ajax')은 문자열을 객체로 변환합니다. 응답을 문자열로 볼 필요가 있다면'$ .ajax'의'complete' 콜백을 사용할 수 있습니다. – Oleg

+0

gotcha, 감사합니다. 그 질문에 완벽하게 답변합니다. –