Di Internet saat ini, AJAX bukan lagi kata yang asing. Berbicara tentang AJAX, XML yang muncul karena RSS mungkin langsung terlintas di benak Anda. Parsing XML mungkin tidak lagi menjadi masalah, terutama dengan PHP5 dan munculnya parser XML dalam jumlah besar, seperti SimpleXML paling ringan. Namun untuk AJAX, parsing XML lebih condong ke dukungan Javascript front-end. Saya rasa setiap orang yang telah mengurai XML akan bingung dengan pohon dan node. Tidak dapat dipungkiri bahwa XML merupakan metode penyimpanan data yang sangat baik, namun fleksibilitasnya membuatnya sulit untuk diurai. Tentu saja, kesulitan yang dimaksud di sini berhubungan dengan protagonis artikel ini - JSON.
Apa itu JSON? Saya tidak akan mengulangi konsepnya. Dalam istilah awam, ini adalah format penyimpanan data, seperti string serial PHP. Ini adalah deskripsi data. Misalnya, jika kita membuat serialisasi sebuah array dan menyimpannya, maka array tersebut dapat dengan mudah dideserialisasi dan diterapkan. Hal yang sama berlaku untuk JSON, hanya saja JSON membangun jembatan interaktif antara Javascript sisi klien dan PHP sisi server. Kami menggunakan PHP untuk menghasilkan string JSON, dan kemudian meneruskan string ini ke Javascript front-end, dan Javascirpt dapat dengan mudah mengubahnya menjadi JSON dan kemudian menerapkannya. Sederhananya, ini benar-benar terlihat seperti sebuah array.
Lebih dekat ke rumah, cara menggunakan JSON. PHP5.2 memiliki dukungan bawaan untuk JSON. Tentunya jika lebih rendah dari versi ini, banyak implementasi versi PHP yang beredar di pasaran, gunakan saja yang mana saja. Sekarang kita terutama berbicara tentang dukungan bawaan JSON untuk PHP. Sangat sederhana, dua fungsi: json_encode dan json_decode (sangat mirip dengan serialisasi). Satu untuk pengkodean dan satu lagi untuk decoding. Pertama mari kita lihat penggunaan pengkodean:
<?php
$arr = susunan(
'nama' => 'Chen Yixin',
'nick' => 'ruang yang dalam',
'kontak' => susunan(
'email' => 'shenkong di qq dot com',
'situs web' => 'http://www.devdao.com',
)
);
$json_string = json_encode($arr);
gema $json_string;
?> Sangat mudah untuk membuat JSON sebuah array. Perlu diperhatikan bahwa dalam pengkodean non-UTF-8, karakter Cina tidak dapat dikodekan, dan hasilnya akan nol. Oleh karena itu, jika Anda menggunakan gb2312 untuk menulis kode PHP, Anda perlu menggunakan iconv atau mb untuk mengonversi konten yang berisi. Bahasa Mandarin ke UTF-8 kemudian dikodekan json_encoded, dan hasil output di atas adalah sebagai berikut:
{"name":"u9648u6bc5u946b","nick":"u6df1u7a7a","contact":{"email":"shenkong di qq dot com","website":"http: //www.devdao.com"}} Saya sudah bilang bahwa ini sangat mirip dengan serialisasi, tapi Anda masih tidak percaya. Setelah pengkodean, perlu untuk memecahkan kode. PHP menyediakan fungsi yang sesuai json_decode. Setelah json_decode dijalankan, sebuah objek akan diperoleh.
<?php
$arr = susunan(
'nama' => 'Chen Yixin',
'nick' => 'ruang yang dalam',
'kontak' => susunan(
'email' => 'shenkong di qq dot com',
'situs web' => 'http://www.devdao.com',
)
);
$json_string = json_encode($arr);
$obj = json_decode($json_string);
print_r($obj);
?> Apakah mungkin untuk mengakses properti di dalam objek? $obj->nama, seperti ini, tentu saja, Anda juga dapat mengubahnya menjadi array untuk memudahkan pemanggilan:
$json_string = json_encode($arr);
$obj = json_decode($json_string);
$arr = (susunan) $obj;
print_r($arr); PHP tidak terlalu berguna untuk berpindah-pindah. Selain pembuatan cache, rasanya seperti menyimpan array secara langsung. Namun, saat Anda berinteraksi dengan meja depan, perannya terlihat di bawah untuk menggunakan Javascript untuk menggunakan karakter ini:
<scrīpt type="teks/javascrīpt">
var arr = {"nama":"u9648u6bc5u946b","nick":"u6df1u7a7a","kontak":{"email":"shenkong di qq dot com","situs web":" http://www.devdao.com"}};
waspada(arr.nama)
</scrīpt> Pada contoh di atas, langsung tetapkan string ini ke variabel, dan itu akan menjadi array Javascrīpt (istilah profesionalnya tidak boleh disebut array, tetapi karena kebiasaan PHP, saya hanya menyebutnya array untuk kenyamanan. mengerti ). Dengan cara ini, Anda dapat dengan mudah melintasi arr atau melakukan apapun yang Anda inginkan. Saya belum menyebutkan AJAX, kan? Ya, coba pikirkan, jika responText yang dikembalikan oleh server menggunakan string JSON dan bukan XML, bukankah akan lebih mudah bagi Javascript front-end untuk memprosesnya? Beginilah cara plester kulit anjing digunakan.
Faktanya, saat saya menulis ini, kecuali format penyimpanan data yang berbeda, tidak banyak perbedaan antara JSON dan XML, tetapi saya akan menyebutkan satu hal di bawah. Meskipun tidak ada hubungannya dengan XML, ini dapat menggambarkan penerapan JSON yang lebih luas, yaitu panggilan data lintas domain. Karena masalah keamanan, AJAX tidak mendukung panggilan lintas domain. Sangat merepotkan untuk memanggil data dengan nama domain yang berbeda. Meskipun ada solusi (Stone menyebutkan proxy dalam kuliahnya, saya tidak memahaminya tetapi saya mengetahuinya) bisa diselesaikan). Saya menulis dua file, yang cukup untuk mendemonstrasikan panggilan lintas domain.
File utama index.html
<scrīpt type="text/javascrīpt">
fungsi getProfile(str) {
var arr = str;
document.getElementById('nick').innerHTML = arr.nick;
}
</skrip>
<tubuh><div id="nick"></div></body>
<scrīpt type="text/javascrīpt" src=" http://www.openphp.cn/demo/profile.php"></scrīpt > File profile.php yang disesuaikan
<?php
$arr = susunan(
'nama' => 'Chen Yixin',
'nick' => 'ruang yang dalam',
'kontak' => susunan(
'email' => 'shenkong di qq dot com',
'situs web' => 'http://www.devdao.com',
)
);
$json_string = json_encode($arr);
gema "getProfile($json_string)";
?> Jelas, ketika index.html memanggil profile.php, string JSON dibuat dan diteruskan ke getProfile sebagai parameter, dan kemudian nama panggilan dimasukkan ke dalam div. Dengan cara ini, interaksi data lintas domain selesai bukankah itu sangat sederhana? Karena JSON sangat sederhana dan mudah digunakan, tunggu apa lagi?