Suatu pendekatan yang saya suka gunakan adalah untuk melapisi / membungkus json dengan objek literal, dan kemudian menyimpan file dengan ekstensi file .jsonp. Metode ini juga membiarkan file json asli Anda (test.json) tidak diubah, karena Anda akan bekerja dengan file jsonp baru (test.jsonp) sebagai gantinya. Nama pada pembungkus bisa berupa apa saja, tetapi nama itu harus sama dengan fungsi panggilan balik yang Anda gunakan untuk memproses jsonp. Saya akan menggunakan test.json Anda yang diposting sebagai contoh untuk memperlihatkan tambahan jsonp wrapper untuk file 'test.jsonp'.
json_callback({"a" : "b", "c" : "d"});
Selanjutnya, buat variabel yang dapat digunakan kembali dengan cakupan global di skrip Anda untuk menahan JSON yang dikembalikan. Ini akan membuat data JSON yang dikembalikan tersedia untuk semua fungsi lain dalam skrip Anda alih-alih hanya fungsi panggilan balik.
var myJSON;
Berikutnya adalah fungsi sederhana untuk mengambil json Anda dengan injeksi skrip. Perhatikan bahwa kita tidak dapat menggunakan jQuery di sini untuk menambahkan skrip ke kepala dokumen, karena IE tidak mendukung metode jQuery .append. Metode jQuery yang dikomentari dalam kode di bawah ini akan berfungsi pada browser lain yang mendukung metode .append. Itu dimasukkan sebagai referensi untuk menunjukkan perbedaan.
function getLocalJSON(json_url){
var json_script = document.createElement('script');
json_script.type = 'text/javascript';
json_script.src = json_url;
json_script.id = 'json_script';
document.getElementsByTagName('head')[0].appendChild(json_script);
// $('head')[0].append(json_script); DOES NOT WORK in IE (.append method not supported)
}
Berikutnya adalah fungsi panggilan balik pendek dan sederhana (dengan nama yang sama dengan pembungkus jsonp) untuk mendapatkan data hasil json ke dalam variabel global.
function json_callback(response){
myJSON = response; // Clone response JSON to myJSON object
$('#json_script').remove(); // Remove json_script from the document
}
Data json sekarang dapat diakses oleh berbagai fungsi skrip menggunakan notasi titik. Sebagai contoh:
console.log(myJSON.a); // Outputs 'b' to console
console.log(myJSON.c); // Outputs 'd' to console
Metode ini mungkin sedikit berbeda dari yang biasa Anda lihat, tetapi memiliki banyak keuntungan. Pertama, file jsonp yang sama dapat dimuat secara lokal atau dari server menggunakan fungsi yang sama. Sebagai bonus, jsonp sudah dalam format ramah lintas domain dan juga dapat dengan mudah digunakan dengan API jenis REST.
Memang, tidak ada fungsi penanganan kesalahan, tetapi mengapa Anda membutuhkannya? Jika Anda tidak dapat memperoleh data json menggunakan metode ini, maka Anda bisa bertaruh Anda memiliki beberapa masalah di dalam json itu sendiri, dan saya akan memeriksanya pada validator JSON yang bagus.
JSON
string, Anda sudah mengambil objek javascript, tidak perlu digunakaneval()
.