一般透過 $.ajax 送 JSON 格式的資料給後端處理
後端回應一個 JSON 回來,都可以直接用 .xxx 來存取回應的 JSON
例如回應的 JSON 是 {"statuscode", 200}
可以直接用:
1 2 3 4 5 6 7 8 9 10 11 12 |
$.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 時,則處理方式稍微複雜一點點
舉例來說,回應的資料格式為 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{ "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 的物件了,因此可以直接用迴圈讀取內容。
以下是範例程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$.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 來實行。
以下是範例程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$.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/
沒有留言:
張貼留言