ในอินเทอร์เน็ตทุกวันนี้ AJAX ไม่ใช่คำที่ไม่คุ้นเคยอีกต่อไป เมื่อพูดถึง AJAX แล้ว XML ที่เกิดขึ้นเนื่องจาก RSS ก็อาจเข้ามาในใจได้ทันที การแยกวิเคราะห์ XML อาจไม่ใช่ปัญหาอีกต่อไป โดยเฉพาะอย่างยิ่งกับ PHP5 และการเกิดขึ้นของตัวแยกวิเคราะห์ XML จำนวนมาก เช่น SimpleXML ที่มีน้ำหนักเบาที่สุด อย่างไรก็ตาม สำหรับ AJAX การแยกวิเคราะห์ XML มีแนวโน้มที่จะรองรับ Javascript ส่วนหน้ามากกว่า ฉันคิดว่าทุกคนที่แยกวิเคราะห์ XML จะสับสนกับแผนผังและโหนด ไม่อาจปฏิเสธได้ว่า XML เป็นวิธีจัดเก็บข้อมูลที่ดีมาก แต่ความยืดหยุ่นทำให้แยกวิเคราะห์ได้ยาก แน่นอนว่าความยากลำบากที่อ้างถึงในที่นี้สัมพันธ์กับตัวเอกของบทความนี้ - JSON
เจสันคืออะไร? ฉันจะไม่ทำซ้ำแนวคิด ในแง่ของคนธรรมดา มันเป็นรูปแบบการจัดเก็บข้อมูล เช่นเดียวกับสตริงที่ต่อเนื่องกันของ PHP เป็นคำอธิบายข้อมูล ตัวอย่างเช่น ถ้าเราทำให้อาร์เรย์เป็นอนุกรมและจัดเก็บไว้ ก็สามารถดีซีเรียลไลซ์และนำไปใช้ได้อย่างง่ายดาย เช่นเดียวกับ JSON ยกเว้นว่าจะสร้างสะพานเชิงโต้ตอบระหว่าง Javascript ฝั่งไคลเอ็นต์และ PHP ฝั่งเซิร์ฟเวอร์ เราใช้ PHP เพื่อสร้างสตริง JSON จากนั้นส่งสตริงนี้ไปยัง Javascript ส่วนหน้า และ Javascirpt ก็สามารถแปลงเป็น JSON ได้อย่างง่ายดายแล้วนำไปใช้ พูดง่ายๆ ก็คือ มันดูเหมือนอาร์เรย์จริงๆ
ใกล้บ้านมากขึ้น วิธีใช้ JSON PHP5.2 มีการรองรับ JSON ในตัว แน่นอนว่าหากต่ำกว่าเวอร์ชันนี้ ก็มีหลายเวอร์ชัน PHP ในตลาด เพียงใช้เวอร์ชันใดก็ได้ที่คุณต้องการ ตอนนี้เราพูดถึงการสนับสนุน PHP ในตัวของ JSON เป็นหลัก ง่ายมาก สองฟังก์ชัน: json_encode และ json_decode (คล้ายกับการทำให้เป็นอนุกรมมาก) อันหนึ่งสำหรับการเข้ารหัสและอีกอันสำหรับการถอดรหัส มาดูการใช้การเข้ารหัสกันก่อน:
<?php
$arr = อาร์เรย์(
'name' => 'เฉิน ยี่ซิน',
'nick' => 'ห้วงอวกาศ',
'ติดต่อ' => อาร์เรย์ (
'email' => 'shenkong ที่ qq dot com',
'เว็บไซต์' => 'http://www.devdao.com',
-
-
$json_string = json_encode($arr);
เสียงสะท้อน $json_string;
?> มันง่ายมากสำหรับ JSON อาร์เรย์ ควรชี้ให้เห็นว่าในการเข้ารหัสที่ไม่ใช่ UTF-8 จะไม่สามารถเข้ารหัสอักขระภาษาจีนได้ และผลลัพธ์จะเป็นโมฆะ ดังนั้น หากคุณใช้ gb2312 ในการเขียนโค้ด PHP คุณต้องใช้ iconv หรือ mb เพื่อแปลงเนื้อหาที่มี ภาษาจีนเป็น UTF-8 จะถูก json_encoded และผลลัพธ์เอาต์พุตด้านบนจะเป็นดังนี้:
{"name": "u9648u6bc5u946b" "nick" "u6df1u7a7a" "ติดต่อ": {"email": shenkong ที่ qq dot com "เว็บไซต์" http: ///www.devdao.com"}} ฉันได้บอกคุณไปแล้วว่ามันคล้ายกับการทำให้เป็นอนุกรมมาก แต่คุณยังไม่เชื่อ หลังจากเข้ารหัสแล้ว จำเป็นต้องถอดรหัส PHP มีฟังก์ชัน json_decode ที่สอดคล้องกัน หลังจากดำเนินการ json_decode แล้ว การดำเนินการจะเป็นดังนี้:
<?php
$arr = อาร์เรย์(
'name' => 'เฉิน ยี่ซิน',
'nick' => 'ห้วงอวกาศ',
'ติดต่อ' => อาร์เรย์ (
'email' => 'shenkong ที่ qq dot com',
'เว็บไซต์' => 'http://www.devdao.com',
-
-
$json_string = json_encode($arr);
$obj = json_decode($json_string);
print_r($obj);
?> เป็นไปได้หรือไม่ที่จะเข้าถึงคุณสมบัติภายในวัตถุ? $obj->name เช่นนี้ คุณสามารถแปลงเป็นอาร์เรย์เพื่อให้โทรได้ง่าย:
$json_string = json_encode($arr);
$obj = json_decode($json_string);
$arr = (อาร์เรย์) $obj;
print_r($arr); PHP ไม่ค่อยมีประโยชน์ในการย้ายข้อมูล นอกจากการสร้างแคชแล้ว ยังรู้สึกเหมือนเก็บอาร์เรย์ไว้โดยตรง อย่างไรก็ตาม เมื่อคุณโต้ตอบกับแผนกต้อนรับส่วนหน้า มาดูกันว่าอย่างไร เพื่อใช้ Javascript เพื่อใช้อักขระนี้:
<scrīpt type="text/javascript">
var arr = {"name": {"email": shenkong ที่ qq dot com "" เว็บไซต์ "" http://www.devdao.com"}};
การแจ้งเตือน (arr.name)
</scrīpt> ในข้างต้น ให้กำหนดสตริงนี้ให้กับตัวแปรโดยตรง และมันจะกลายเป็นอาร์เรย์ Javascript (ศัพท์ทางวิชาชีพไม่ควรเรียกว่าอาร์เรย์ แต่เนื่องจากนิสัยของ PHP ฉันจึงเรียกมันว่าอาร์เรย์เพื่อความสะดวก เข้าใจ ). ด้วยวิธีนี้ คุณสามารถเดินทางข้าม arr หรือทำอะไรก็ได้ที่คุณต้องการได้อย่างง่ายดาย ฉันยังไม่ได้พูดถึง AJAX เลยใช่ไหม? ใช่ ลองคิดดูว่าถ้าข้อความตอบกลับที่เซิร์ฟเวอร์ส่งคืนใช้สตริง JSON แทน XML จะสะดวกหรือไม่ที่ Javascript ส่วนหน้าจะประมวลผลมัน นี่คือวิธีการใช้พลาสเตอร์ผิวหนังสุนัข
ในความเป็นจริง ขณะที่ฉันเขียนสิ่งนี้ JSON และ XML ไม่มีความแตกต่างกันมากนัก ยกเว้นรูปแบบการจัดเก็บข้อมูลที่แตกต่างกัน แต่ฉันจะพูดถึงสิ่งหนึ่งด้านล่าง แม้ว่าจะไม่เกี่ยวข้องกับ XML เพียงเล็กน้อย แต่ก็สามารถแสดงให้เห็นการใช้งาน JSON ในวงกว้างได้ ซึ่งก็คือการโทรข้อมูลข้ามโดเมน เนื่องจากปัญหาด้านความปลอดภัย AJAX จึงไม่รองรับการโทรข้ามโดเมน การโทรข้อมูลภายใต้ชื่อโดเมนที่แตกต่างกันนั้นเป็นเรื่องยากมาก แม้ว่าจะมีวิธีแก้ปัญหา (พร็อกซีที่ Stone กล่าวถึงในการบรรยายของเขา แต่ฉันไม่เข้าใจ) จะได้รับการแก้ไข) ฉันเขียนไฟล์สองไฟล์ซึ่งเพียงพอที่จะสาธิตการโทรข้ามโดเมน
ไฟล์หลักindex.html
<scrīpt type="text/javascrīpt">
ฟังก์ชั่น getProfile (str) {
var arr = str;
document.getElementById('nick').innerHTML = arr.nick;
-
</สคริปต์>
<body><div id="นิค"></div></body>
<scrīpt type="text/javascrīpt" src=" http://www.openphp.cn/demo/profile.php"></scrīpt > ไฟล์ที่ปรับแล้ว profile.php
<?php
$arr = อาร์เรย์(
'name' => 'เฉิน ยี่ซิน',
'nick' => 'ห้วงอวกาศ',
'ติดต่อ' => อาร์เรย์ (
'email' => 'shenkong ที่ qq dot com',
'เว็บไซต์' => 'http://www.devdao.com',
-
-
$json_string = json_encode($arr);
เสียงสะท้อน "getProfile($json_string)";
?> แน่นอนว่าเมื่อเรียก index.html profile.php สตริง JSON จะถูกสร้างขึ้นและส่งผ่านไปยัง getProfile เป็นพารามิเตอร์ จากนั้นชื่อเล่นจะถูกแทรกลงใน div ด้วยวิธีนี้ การโต้ตอบข้อมูลข้ามโดเมนจะเสร็จสมบูรณ์ มันไม่ง่ายเลยเหรอ? เนื่องจาก JSON นั้นเรียบง่ายและใช้งานง่าย คุณจะรออะไรอีก