服务器端我有这个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网格的响应。)
答案 0 :(得分:1)
JSON为您提供了将对象信息作为字符串发布的方法。所以没有“json对象”。您可以使用字符串,例如
之类的文本var str = '[["a", "b"], ["c", "d"], ["e", "f"]]';
或者您有一个对象,例如
var myObj = [["a", "b"], ["c", "d"], ["e", "f"]];
JSON的完整规范在here或rfc4627中有所描述。因此,您不应该混合使用初始化语法,该语法允许您使用非常接近语法的JSON字符串创建对象。
如果您使用带有dataType: "json"
参数的$.ajax并且服务器响应包含JSON字符串,则jqGrid会在内部将服务器响应转换为对象(请参阅$.parseJSON函数)和{{1的参数将已经是对象。所以你可以使用
done
例如alert(response.length);
的回调函数内部。无论如何,客户端似乎都能正确获得服务器响应。