0

服务器端我有这个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 网格。)

4

1 回答 1

1

JSON 让您可以将有关对象的信息作为字符串发布。所以没有“json对象”。要么你有字符串,例如像这样的文本

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

或者你有一个对象,例如

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

JSON 的完整规范在此处rfc4627中进行了描述。所以你不应该混合初始化语法,它允许你用非常接近的语法创建带有 JSON 字符串的对象。

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

alert(response.length);

例如在回调函数内部getAllRequest.done。无论如何,客户端似乎都正确地获得了服务器响应。

于 2012-06-05T17:48:54.970 回答