Jika Javascript hanya diizinkan untuk mengakses skrip dari domain yang sama, bagaimana situs web dapat membuat mashup yang harus membaca dan memodifikasi konten dari domain lain?
sumber
Jika Javascript hanya diizinkan untuk mengakses skrip dari domain yang sama, bagaimana situs web dapat membuat mashup yang harus membaca dan memodifikasi konten dari domain lain?
Jika API yang Anda coba akses mendukung JSONP , Anda hanya perlu memberikan nama fungsi javascript dalam permintaan Anda, maka JSONP mengembalikan javascript seperti myfunc({the:data});
yang dapat Anda jalankan seperti javascript biasa, itulah sebabnya Anda akan membuat <script src="www.website.com/somecall?jsonp=myfunc">
tag baru untuk "mengirim permintaan" (jQuery melakukan ini secara otomatis jika Anda menggunakan type: jsonp
dalam $.ajax
permintaan).
Kelemahannya adalah ia membutuhkan penyedia API untuk mendukung JSONP.
Flash dapat mengakses konten lintas domain selama situs web target memiliki crossdomain.xml
file pada akarnya yang menyatakan memungkinkan, yang biasanya terjadi pada server yang menyediakan API).
Kelemahannya adalah ia membutuhkan Flash di peramban pengguna dan situs web tempat Anda mendapatkan data harus memiliki crossdomain.xml yang memungkinkan permintaan lintas-domain.
Bahasa sisi server seperti PHP tidak memiliki batasan domain yang sama dengan BS, sehingga Anda dapat memiliki skrip yang bertindak sebagai proksi (mis. Unduh melalui salah satu ekstensi http seperti cURL).
Manfaat tambahannya adalah Anda dapat membersihkan data (atau bahkan mashup banyak sumber) di server, sebelum meneruskannya ke halaman web / javascript Anda, sehingga Anda bahkan dapat mengekstrak hanya bagian data yang berguna, yang bagus ketika melakukan webapp seluler di mana bandwidth bisa menjadi masalah.
The downside adalah bahwa semua permintaan harus melalui server Anda, sehingga meningkatkan beban di server Anda.
Namun manfaatnya adalah ia akan bekerja dengan sumber daya apa pun karena tidak memerlukan target untuk mendukung crossdomain atau jsonp. Jadi jika tidak ada yang berhasil, ini akan berhasil.
Internet Explorer memiliki Permintaan Lintas Domain
Firefox 3.5+ memiliki standar berbagi asal , tetapi memerlukan sumber daya yang Anda coba akses untuk menyertakan header khusus, misalnya dalam PHP:
header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");
Beberapa peramban utama lain mendukung ini juga , jadi jika Anda tidak perlu mendukung peramban lama dan jika Anda bisa mendapatkan sumber daya yang Anda coba akses untuk mengirim tajuk tersebut, ini mungkin yang terbaik, jika tidak sisi server skrip akan menjadi rekomendasi saya.
Firefox juga memiliki pengaturan pengguna capability.policy.default.XMLHttpRequest.open
, tetapi saya tidak akan mengandalkan pengguna mengubah pengaturan di browser-nya.
Anda dapat menggunakan API (dari domain lain) untuk itu. Javascript Anda akan memanggil file PHP (atau file skrip lainnya) yang ada di server web Anda (domain Anda), yang akan memanggil API (dari domain lain menggunakan CURL) dan mendapatkan respons kepada Anda.