Skip to content


จะใช้ JSON ใน php เซ็ต MIME type อะไรดี

โดยปกติแล้วใน php รวมถึง server-sided script เช่น jsp, asp หรือภาษาอื่น ๆ จะมีการกำหนดค่าของเพจที่ส่งกลับมาว่ามีชนิดเป็น html ซึ่งมีชนิดของไฟล์ที่เราเรียกว่า MIME Type ว่าเป็น text/html

MIME ย่อมาจาก Multipurpose Internet Mail Extension ใช้สำหรับบ่งบอกชนิดของไฟล์สำหรับการรับส่งกันใน Internet เช่น ไฟล์ .txt ธรรมดา จะมี MIME type เป็น “text/plain” ส่วนไฟล์ html ก็จะเป็น “text/html” ส่วนภาพ gif ก็จะเป็น “image/gif” เป็นต้น

ทำไมเราต้องสนใจชนิดของไฟล์พวกนี้ด้วยล่ะ ด้วยเหตุผลที่ว่า สคริปที่เป็น server-sided script อย่างที่ผมอ้างถึงข้างต้น มันสามารถเปลี่ยนชนิดของไฟล์ที่ส่งกลับมาได้น่ะสิครับ เช่น หน้า php ที่ส่งเป็นภาพกลับมาแทนที่จะเป็น html ก็เพราะว่าเค้ามีการส่ง MIME Type ของภาพกลับมาใน header ด้วยครับ

อย่างที่ผมได้บอกตั้งแต่แรกแล้วว่าปกติแล้ว server-sided script โดยปกติแล้วจะส่ง type เป็น html กลับมาให้ แต่ตัว JSON เองนั้น อย่างที่รู้กันอยู่ว่ามันคือ JavaScript (สังเกตจากชื่อย่อก็ได้ครับ JavaScript Object Notation) จะมากำหนดให้เป็น html ก็กระไรอยู่ การใช้งาน JSON จึงควรกำหนด MIME Type ให้มันอย่างถูกต้องไปเลยครับ

เราสามารถกำหนด MIME Type ให้กับ JSON ได้ 2 ชนิด คือ “text/javascript” หรือ “application/json” ครับ ซึ่งแบบหลังจะเป็นที่นิยมมากกว่า

สำหรับคนที่เคยมีประสบการณ์กับ JSON บน jQuery นั้น ถ้าไม่เคยกำหนด MIME Type ให้กับ JSON โดยปล่อยให้มันเป็น “text/html” ธรรมดากลับมา คงจะเคยเจอเหตุการณ์ที่ jQuery สามารถดึงค่า JSON มาใช้ได้บ้างไม่ได้บ้างแหละครับ

และในเมื่อมันเป็นความไม่แน่นอนที่ไม่มีใครอยากให้เกิดขึ้่น เราก็แค่เพิ่ม code เข้าไปเพื่อให้มันกลายเป็น JSON จริง ๆ น่าจะง่ายกว่า

คำสั่งใน php ก็ง่ายแสนง่ายครับ แค่บรรทัดเดียวว่า…

header("content-type:application/json");

เท่านี้เองครับ สิ่งที่ return กลับไปให้บราวเซอร์ก็จะกลายเป็น JSON ในบัดดล ว่าแล้วก็ไปดู LIVE DEMO กันเลย

ล.ป. (ลืมไป) ตัวอย่างใน LIVE DEMO บางทีอาจจะได้ค่ากลับมาเป็น JSON เสมอก็ได้ อย่างที่บอกแหละครับ ว่ามันไม่แน่ไม่นอน

หมายเหตุ

server-sided script หมายถึง script ต่าง ๆ ที่มีการรันที่ server แล้วส่งกลับมาให้กับ client เช่น php, asp, jsp, perl เป็นต้น
client-sided script หมายถึง script ต่าง ๆ ที่มีการรันที่ตัว client เอง เช่น Javascript, VBScript เป็นต้น

Share

Posted in Ajax, jQuery, JSON.

Tagged with , , , , .


10 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. test says

    เคยใช้ application/json แล้วมีปัญหากับ ie6 ครับ กลายเป็นการ download ไฟล์แทน

  2. chonla says

    เรียกตรง ๆ หรือเปล่าล่ะครับ ถ้าเรียกตรง ๆ ก็เป็นการดาวน์โหลดแน่ ๆ ครับ ถึงใช้ text/javascript ถ้าเรียกตรง ๆ ก็ดาวน์โหลดครับ แต่ถ้าเรียกผ่าน Ajax ก็จะไม่เป็นครับ

  3. test says

    เรียกผ่าน ajax ของ jquery ครับ

  4. chonla says

    แล้วถ้าเป็น text/javascript ล่ะครับ

    เสียดายจริง ๆ ผมไม่มี IE6 ด้วย

  5. chonla says

    ผมลอง IE6 Portable version แล้วครับ ยังใช้งาน application/json ได้ดีอยู่ครับ ไม่เกิดการดาวน์โหลดอะไรครับ

  6. test says

    ตะกี้เพิ่งไปลองมาหยกๆ เลยครับ ใช้ได้ปกติ
    ไม่แน่ใจว่าว่าตอนนั้นเกิดจากอะไร
    อาจจะเป้นเพราะตอนนั้นผมเพิ่ง install ie6 ใหม่ๆ มั๊งครับ

  7. chonla says

    ครับ เป็นว่าใช้ได้แล้ว ก็ยินดีด้วยครับ

  8. ลูกศิษดิ์พี่อู says

    แปลกแฮะ
    ใช้ Server IIS
    ส่งกลับเปง json ไม่ได้อะ
    มันเป็น undefined
    แต่ถ้าส่งมาแบบ html ได้นะ
    พอเป็น json กลับไมได้
    แต่บน Apache ทำได้
    ทั้งๆ ที่กำหนด header แล้วนะ

  9. chonla says

    ไม่เคยใช้แฮะ iis กับ php

    ลองอ่านอันนี้ดูครับ เผื่อช่วยได้

    http://www.w3.org/International/O-HTTP-charset

Continuing the Discussion

  1. เครื่องคุณลง Browser อะไรกันบ้าง - jQuery, Ajax, PHP, JSON, XML, Web Technologies linked to this post on October 30, 2008

    [...] JSON [http://blog.chonla.com/?p=66] ทำให้ผมต้องลองไปหา IE 6 [...]



Some HTML is OK

or, reply to this post via trackback.

*