Apakah itu domain? Cross-domain bermaksud mengakses data dalam satu domain dalam domain lain.
Jika anda hanya memuatkan kandungan domain lain tanpa mengakses data, domain silang adalah sangat mudah, seperti menggunakan iframe. Tetapi jika anda perlu memuatkan dan menggunakan data ini dari domain lain, ia akan menjadi lebih menyusahkan. Atas sebab keselamatan, penyemak imbas mempunyai sekatan ketat terhadap situasi ini dan beberapa tetapan perlu dibuat pada kedua-dua klien dan pelayan untuk melaksanakan permintaan merentas domain.
Pengenalan kepada JSONP JSONP
(JSON dengan Padding) ialah kaedah merentas domain yang biasa digunakan, tetapi ia hanya menyokong skrip JS dan data format JSON. Seperti namanya, JSONP
ialah cara teknikal yang menggunakan JSON sebagai shim untuk melaksanakan permintaan merentas domain. Prinsip asasnya adalah untuk mengambil kesempatan daripada fakta bahawa tag HTML sememangnya merentas domain dan menggunakannya untuk memuatkan data JSON daripada domain lain Selepas pemuatan selesai, panggilan balik akan dijalankan secara automatik Fungsi memberitahu pemanggil. Proses ini memerlukan sokongan pelayan daripada domain lain, jadi pelaksanaan merentas domain dengan cara ini tidak sewenang-wenangnya.
Sokongan JQuery untuk JSONP
Objek Ajax JQuery menyokong permintaan merentas domain dalam mod JSONP dengan menentukan parameter crossDomain sebagai benar dan parameter dataType sebagai jsonp[1], atau menggunakan borang yang disingkatkan: kaedah getJSON()[2]. Contohnya:
Apabila menggunakan
getJSON
// 设置crossDomain和dataType参数以使用JSONP $.ajax({ dataType: "jsonp", url: "http://www.example.com/xxx", crossDomain: true, data: { } }).done(function() { // 请求完成时的处理函数 }); // 使用getJSON $.getJSON("http://www.example.com/xxx?jsoncallback=?", { // 参数 }, function() { // 请求完成时的处理函数 });
, dan kemudian gunakan kaedah GET bersama-sama dengan parameter lain untuk membuat permintaan. Apabila menggunakan kaedah pertama, selagi nilai parameter dataType ditentukan sebagai jsonp, JQuery akan secara automatik menambah parameter jsoncallback selepas alamat permintaan, jadi terdapat tidak perlu menambahnya secara manual.
Kecacatan permintaan merentas domain JQuery: pengendalian ralat Permintaan merentas domain mungkin gagal Contohnya, tetapan keselamatan pelayan pihak lain enggan menerima permintaan daripada kami (kami tiada dalam senarai amanah pihak lain), atau rangkaian tidak tersedia, atau pelayan pihak lain. ditutup, atau alamat permintaan atau parameter tidak betul dengan betul menyebabkan pelayan melaporkan ralat dan sebagainya. Dalam JQuery, apabila permintaan dihantar menggunakan ajax atau getJSON, objek jqXHR [3] akan dikembalikan. Objek ini melaksanakan protokol Promise, jadi kami boleh menggunakan antara muka selesai, gagal, sentiasa dan lain-lain untuk mengendalikan panggilan balik. Sebagai contoh, kita boleh menggunakannya dalam panggilan balik failnya untuk mengendalikan ralat apabila permintaan gagal:
这种方式能够处理“正常的错误”,例如超时、请求被中止、JSON解析出错等等。但它对那些“非正常的错误”,例如网络不通、服务器已关闭等情况的支持并不好。 例如当对方服务器无法正常访问时,在Chrome下你会在控制台看到一条错误信息: JQuery不会处理该错误,而是选择“静静地失败”:fail回调不会执行,你的代码也不会得到任何反馈,所以你没有处理这种错误的机会,也无法向用户报告错误。 一个例外是在IE8。在IE8中,当网络无法访问时,标签一样会返回加载成功的信息,所以JQuery无法根据