$.ajax({ type: 'POST', url: $('#ProductForm').attr('action'), data: $('#ProductForm').serialize(), dataType: 'json', beforSend: function(){ $('#status').addClass('loading'); }, success: function(data){ console.log("%s", "success callback generate HTML option.."); if(data != null){ //$('#ProductId').html('').show(); $.each(data.products, function(key, value){ optionTag = ''; console.log("appending : %s", optionTag); //$('#ProductId').append(optionTag) }); } $('#status').removeClass('loading'); }, error: function(xhr, status){ //$('#ProductId').hide(); $('#status').removeClass('loading'); console.log("Ajax error status code: %d text: %s", xhr.status, xhr.statusText) } });
ในฝั่งเซอฟเวอร์ SQL query ข้อมูลโดยกำหนด ORDER BY `reference` ASC ให้เรียงตามรหัสสินค้า
แล้วใช้ PHP json_encode() response กลับมาเป็น json key/value หน้าตาแบบนี้
ตัวอย่าง response ข้อมูลเรียงลำดับตามชื่อ
{"products":{"1040":"16PHOTO","1037":"16RELAY","1035":"8RELAY","1034":"8SS R\/L out","1024":"AD\/DA","1005":"USB Starter"}}
ทดสอบใน Firefox Browser ข้อมูลก็เรียงลำดับตามชื่อ ตรงกับที่ query
dump ข้อมูลใน firebug console |
JSON response ใน Firefox (fire bug) |
แต่พอเปิดใน browser IE9 / Chrome ข้อมูลจะถูกเรียงลำดับใหม่ เข้าใจว่ามันเรียงตาม Key
dump ข้อมูล ใน IE9 console |
JSON response ใน Google Chrome |
สรุปว่า Browser แต่ละตัวมันทำงานกับ JSON object ไม่เหมือนกัน วิบากกรรมเลยตกอยู่กับ dev
ตอนนี้คิดวิธีแก้ปัญหาไว้สองอย่าง
1. เพิ่ม javascript ให้ sort เรียงข้อมูลในฝั่ง client อีกที
2. เปลี่ยน format ของ json ในฝั่ง server ใหม่โดยเก็บ id เป็น value แทน
[{"id": "123","name": "aaa",}, {"id": "124", "name":"bbbb"}]
to be continue..
ไม่มีความคิดเห็น:
แสดงความคิดเห็น