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 文字列を使用してオブジェクトを作成できるようにする初期化構文を混在させるべきではありません。

パラメータで$.ajaxを使用dataType: "json"し、サーバー応答に JSON 文字列 jqGrid が含まれている場合、サーバー応答を内部的にオブジェクトに変換し ( $.parseJSON関数を参照)、のパラメータはdone既にオブジェクトになります。だからあなたは使うことができます

alert(response.length);

たとえば、のコールバック関数内getAllRequest.done。いずれにせよ、クライアントはサーバーの応答を正しく取得しているようです。

于 2012-06-05T17:48:54.970 に答える