Java HttpServlet发送gson字符串,JavaScript将其作为数组获取

时间:2012-06-05 17:33:34

标签: jquery json servlets jqgrid

服务器端我有这个Java:

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这个JavaScript:

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网格,并且在给出响应时它不会填充网格。 (提供对此处未显示的jq网格的响应。)

1 个答案:

答案 0 :(得分:1)

JSON为您提供了将对象信息作为字符串发布的方法。所以没有“json对象”。您可以使用字符串,例如

之类的文本
var str = '[["a", "b"], ["c", "d"], ["e", "f"]]';

或者您有一个对象,例如

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

JSON的完整规范在hererfc4627中有所描述。因此,您不应该混合使用初始化语法,该语法允许您使用非常接近语法的JSON字符串创建对象。

如果您使用带有dataType: "json"参数的$.ajax并且服务器响应包含JSON字符串,则jqGrid会在内部将服务器响应转换为对象(请参阅$.parseJSON函数)和{{1的参数将已经是对象。所以你可以使用

done

例如alert(response.length); 的回调函数内部。无论如何,客户端似乎都能正确获得服务器响应。