Rumah  >  Artikel  >  hujung hadapan web  >  jquery menyelesaikan masalah akses merentas domain pelanggan_jquery

jquery menyelesaikan masalah akses merentas domain pelanggan_jquery

WBOY
WBOYasal
2016-05-16 16:22:13960semak imbas

"Akses merentas domain" pihak pelanggan sentiasa menyusahkan, dengan bantuan jQuery, masalah merentas domain telah diselesaikan sejak jQuery-1.2. Memandangkan saya menghadapi masalah merentas domain dalam projek, saya mengambil peluang ini untuk menyiasat isu merentas domain, merujuk maklumat yang berkaitan dan amalan saya sendiri, dan akhirnya menyelesaikan masalah merentas domain. Catat untuk rujukan.

jQuery.ajax() menyokong kaedah mendapatkan merentas domain, yang sebenarnya dilakukan menggunakan jsonp.

Kes sebenar:

Salin kod Kod adalah seperti berikut:

$.ajax({
async:false,
​​​​ url: 'http://www.mysite.com/demo.do', // URL silang domain
            jenis: 'DAPAT',
Jenis Data: 'jsonp',
               jsonp: 'jsoncallback', //Panggil balik lalai
data: mydata,
Tamat masa: 5000,
               beforeSend: function(){ //Kaedah ini tidak dicetuskan dalam mod jsonp. Sebabnya mungkin jika dataType ditentukan sebagai jsonp, ia bukan lagi acara ajax
            },
Kejayaan: Fungsi (JSON) {// Fungsi Panggilan Balik JQuery yang dipratakrifkan Pelanggan Selepas berjaya mendapatkan data JSON pada pelayan merentas domain, fungsi panggil balik ini
If(json.actionErrors.length!=0){
alert(json.actionErrors);                                                                                                                                                                                                    genDynamicContent(qsData,type,json);              },
lengkap: fungsi(XMLHttpRequest, textStatus){
                       $.unblockUI({ fadeOut: 10 });              },
ralat: function(xhr){
keluar keluar keluar keluar melalui lebih dari ke atas ke atas lebih dari atas lebih banyak lagi '' melalui melalui melalui lebih dari over- over -over -by -by -by -by -by -by - ‐‐‐‐‐‐‐​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​: Kaedah ini tidak dicetuskan dalam mod jsonp,
//Minta pengendalian ralat
alert("Ralat permintaan (sila semak status rangkaian yang berkaitan.)");                }
});



Nota:

Salin kod

Kod adalah seperti berikut: $.getJSON(" http://www.mysite.com/demo.do?name1=" value1 "&callback=?",
              fungsi (json){
If(json.Attribute name==value){
// Laksanakan kod                                                                                                                                                                                        });

Kaedah ini sebenarnya adalah enkapsulasi lanjutan bagi api $.ajax({..}) dalam contoh di atas Beberapa parameter asas api $.ajax dirangkumkan dan tidak kelihatan.

Di bahagian pelayan, gunakan callback= request.getParameter("callback") untuk mendapatkan jsonp32440980 dipanggil semula kemudian di sebelah jQuery
Kemudian kembalikan sesuatu seperti: "jsonp32440980(" tatasusunan json untuk dikembalikan ")"; jquery akan memuatkan secara dinamik dan memanggil ini melalui kaedah panggil balik: jsonp32440980 (tatasusunan json
). Ini mencapai tujuan pertukaran data merentas domain
Prinsip paling asas jsonp ialah: penambahan satu secara dinamik adalah konsisten (ruang qq menggunakan kaedah ini untuk mencapai pertukaran data merentas domain). JSONP ialah sejenis gelagat suntikan skrip (Suntikan Skrip), jadi ia juga mempunyai risiko keselamatan tertentu.

Nota: jquey tidak menyokong domain silang siaran.

Ini kerana walaupun penggunaan siaran untuk menjana iframe secara dinamik boleh mencapai tujuan merentas domain siaran (beginilah cara pakar js menampal jquery1.2.5), ini adalah kaedah yang agak melampau dan tidak disyorkan. Ia juga boleh dikatakan bahawa kaedah akses merentas domain mendapatkan adalah sah, dan kaedah siaran dianggap tidak sah dari perspektif keselamatan Adalah lebih baik untuk tidak menyiarkan sebagai pilihan terakhir Permintaan untuk akses merentas domain pada pelanggan side nampaknya telah menarik perhatian w3c Menurut maklumat, html5 Standard WebSocket menyokong pertukaran data merentas domain dan harus menjadi penyelesaian pertukaran data merentas domain pilihan pada masa hadapan.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn