Apa itu JSONP?
Hal penting yang harus diingat dengan jsonp adalah bahwa ini sebenarnya bukan protokol atau tipe data. Ini hanya cara memuat skrip dengan cepat dan memproses skrip yang diperkenalkan ke halaman. Dalam semangat JSONP, ini berarti memperkenalkan objek javascript baru dari server ke dalam aplikasi / skrip klien.
Kapan JSONP dibutuhkan?
Ini adalah metode 1 yang memungkinkan satu domain untuk mengakses / memproses data dari yang lain di halaman yang sama secara asinkron. Terutama, ini digunakan untuk mengganti pembatasan CORS (Cross Origin Resource Sharing) yang akan terjadi dengan permintaan XHR (ajax). Pemuatan skrip tidak tunduk pada batasan CORS.
Bagaimana melakukannya
Memperkenalkan objek javascript baru dari server dapat diimplementasikan dengan banyak cara, tetapi praktik yang paling umum adalah server mengimplementasikan eksekusi fungsi 'callback', dengan objek yang diperlukan diteruskan ke dalamnya. Fungsi panggilan balik hanyalah sebuah fungsi yang telah Anda siapkan pada klien di mana skrip yang Anda muat panggilannya pada saat skrip dimuat untuk memproses data yang diteruskan ke dalamnya.
Contoh:
Saya memiliki aplikasi yang mencatat semua item di rumah seseorang. Aplikasi saya sudah diatur dan sekarang saya ingin mengambil semua item di kamar tidur utama.
Aplikasi saya aktif app.home.com
. Api yang saya perlukan untuk memuat data sedang aktif api.home.com
.
Kecuali jika server secara eksplisit diatur untuk mengizinkannya, saya tidak dapat menggunakan ajax untuk memuat data ini, karena bahkan halaman di subdomain terpisah tunduk pada batasan XHR CORS.
Idealnya, atur semuanya untuk mengizinkan x-domain XHR
Idealnya, karena api dan aplikasi berada di domain yang sama, saya mungkin memiliki akses untuk menyiapkan header api.home.com
. Jika saya melakukannya, saya dapat menambahkan Access-Control-Allow-Origin:
item header yang memberikan akses ke app.home.com
. Dengan asumsi tajuk diatur sebagai berikut Access-Control-Allow-Origin: "http://app.home.com"
:, ini jauh lebih aman daripada menyiapkan JSONP. Ini karena app.home.com
bisa mendapatkan semua yang diinginkan api.home.com
tanpa api.home.com
memberikan akses CORS ke seluruh internet.
Solusi XHR di atas tidak memungkinkan. Siapkan JSONP Pada skrip klien saya: Saya menyiapkan fungsi untuk memproses tanggapan dari server ketika saya melakukan panggilan JSONP. :
function processJSONPResponse(data) {
var dataFromServer = data;
}
Server perlu diatur untuk mengembalikan skrip mini yang tampak seperti "processJSONPResponse('{"room":"main bedroom","items":["bed","chest of drawers"]}');"
Ini mungkin dirancang untuk mengembalikan string seperti //api.home.com?getdata=room&room=main_bedroom
itu jika sesuatu seperti itu dipanggil.
Kemudian klien menyiapkan tag skrip seperti:
var script = document.createElement('script');
script.src = '//api.home.com?getdata=room&room=main_bedroom';
document.querySelector('head').appendChild(script);
Ini memuat skrip dan segera memanggil window.processJSONPResponse()
sebagai ditulis / echo / dicetak oleh server. Data yang diteruskan sebagai parameter ke fungsi sekarang disimpan di dataFromServer
variabel lokal dan Anda dapat melakukannya dengan apa pun yang Anda butuhkan.
Membersihkan
Setelah klien memiliki datanya, mis. segera setelah skrip ditambahkan ke DOM, elemen skrip dapat dihapus dari DOM:
script.parentNode.removeChild(script);