一般透過 $.ajax 送 JSON 格式的資料給後端處理
後端回應一個 JSON 回來,都可以直接用 .xxx 來存取回應的 JSON
例如回應的 JSON 是 {"statuscode", 200}
可以直接用:
$.ajax({ type: "GET", url: endpoint, contentType: "application/json", dataType: "json", success: function(data){ consile.log("statuscode: " + data.statuscode); }, error: function(){ unblock(); // TODO } });
這樣在 FireFox 的 FireBug 中就會跑出:「statuscode: 200」的記錄。
當回應的 JSON 是個巢狀的 JSON array 時,則處理方式稍微複雜一點點
舉例來說,回應的資料格式為 :
{ "statuscode": 200, "time": [ { "week":1, "start":"03:00", "end":"03:10" }, { "week": 2, "start":"03:00", "end":"03:10" } ] }
也就是一個 JSON 格式的資料,statuscode 欄位記錄狀態
time 欄位記錄了一個 JSON array 表示一週內的某些時間
以上面的例子是表示星期一 3:00~3:10、星期二 3:00~3:10。
如果用最開頭的例子的取法,data.statuscode 可以順利取到狀態的值
data.time 會有兩種可能:
1. data.time 是 JSON object 時,data.time 會得到 [object Object],[object Object] 的結果
2. data.time 是字串,則只會取得 [ ...... ] 這段範圍的字串值。
以下就依照兩種狀況處理。
1. data.time 是 JSON object
取出的 data.time 已經是 JSON 的物件了,因此可以直接用迴圈讀取內容。
以下是範例程式碼:
$.ajax({ type: "GET", url: endpoint, contentType: "application/json", dataType: "json", success: function(data){ consile.log("statuscode: " + data.statuscode); if(data.statuscode == 200) { // 顯示 time_array 當中每一個陣列的內容 $.each(data.time, function(index, json) { console.log("#" + json.week + ", period: " + json.start + " to " + json.end); }); } } });
2. data.time 是字串
要先轉換成 JSON 的格式,然後再用迴圈讀取
這裡迴圈是用 jQuery 的 $.each 來實行。
以下是範例程式碼:
$.ajax({ type: "GET", url: endpoint, contentType: "application/json", dataType: "json", success: function(data){ consile.log("statuscode: " + data.statuscode); if(data.statuscode == 200) { var time = data.time; var time_array = $.parseJSON(time); // 把字串轉換成 JSON array // 顯示 time_array 當中每一個陣列的內容 $.each(time_array, function(index, json) { console.log("#" + json.week + ", period: " + json.start + " to " + json.end); }); } } });
顯示結果:
#1, period: 03:00 to 03:10
#2, period: 03:00 to 03:10
可以看出來其實兩種的差別只是需不需要先把字串轉換成 JSON 物件而已。
參考資料:
jQuery.each( ) http://api.jquery.com/jQuery.each/
jQuery.parseJSON( json ) http://api.jquery.com/jQuery.parseJSON/
沒有留言:
張貼留言