Berikut ini berfungsi di semua browser kecuali IE (saya sedang menguji di IE 9).
jQuery.support.cors = true;
...
$.ajax(
url + "messages/postMessageReadByPersonEmail",
{
crossDomain: true,
data: {
messageId : messageId,
personEmail : personEmail
},
success: function() {
alert('marked as read');
},
error: function(a,b,c) {
alert('failed');
},
type: 'post'
}
);
Saya memiliki fungsi lain yang digunakan dataType: 'jsonp'
, tetapi saya tidak memerlukan data apa pun yang dikembalikan pada panggilan AJAX ini. Pilihan terakhir saya adalah mengembalikan beberapa omong kosong yang dibungkus JSONP hanya untuk membuatnya berfungsi.
Adakah ide mengapa IE mengacaukan permintaan CORS yang tidak mengembalikan data?
jquery
internet-explorer-9
cross-domain
jsonp
cors
Garrett
sumber
sumber
Jawaban:
Ini adalah bug yang diketahui dengan jQuery. Tim jQuery "tidak memiliki rencana untuk mendukung ini secara inti dan lebih cocok sebagai plugin." (Lihat komentar ini ). IE tidak menggunakan XMLHttpRequest , tetapi objek alternatif bernama XDomainRequest .
Ada adalah sebuah plugin yang tersedia untuk mendukung ini di jQuery, yang dapat ditemukan di sini : https://github.com/jaubourg/ajaxHooks/blob/master/src/xdr.js
EDIT Fungsi
$.ajaxTransport
mendaftarkan pabrik transporter. Transporter digunakan secara internal oleh$.ajax
untuk melakukan permintaan. Oleh karena itu, saya menganggap Anda harus dapat menelepon$.ajax
seperti biasa. Informasi tentang pengangkut dan perluasan$.ajax
dapat ditemukan di sini .Juga, versi yang mungkin lebih baik dari plugin ini dapat ditemukan di sini .
Dua catatan lainnya:
Edit 2: masalah http ke https
Sumber: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
sumber
http
kehttps
), domain (google.com
kebing.com
), subdomain (mail.google.com
kemaps.google.com
), atau protokol (google.com:80
- port default kegoogle.com:8080
) semua akan memicu permintaan "lintas domain". Pada dasarnya segala sesuatu sebelum yang pertama/
di URL Anda harus identik.Membangun jawaban yang diterima oleh @dennisg, saya menyelesaikan ini dengan sukses menggunakan jQuery.XDomainRequest.js oleh MoonScript.
Kode berikut bekerja dengan benar di Chrome, Firefox dan IE10, tetapi gagal di IE9. Saya hanya memasukkan skrip dan sekarang secara otomatis bekerja di IE9. (Dan mungkin 8, tapi saya belum mengujinya.)
sumber
Petunjuk lengkap tentang cara melakukan ini menggunakan plugin "jQuery-ajaxTransport-XDomainRequest" dapat ditemukan di sini: https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest#instructions
Plugin ini secara aktif didukung, dan menangani HTML, JSON dan XML. File ini juga dihosting di CDNJS, jadi Anda dapat langsung meletakkan skrip ke halaman Anda tanpa pengaturan tambahan: http://cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.1/jquery.xdomainrequest .min.js
sumber
Masalahnya adalah IE9 dan versi di bawahnya tidak mendukung CORS. XDomainRequest hanya mendukung GET / POST dan
text/plain
tipe konten seperti yang dijelaskan di sini: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspxJadi jika Anda ingin menggunakan semua verba HTTP dan / atau json dll, Anda harus menggunakan solusi lain. Saya telah menulis proxy yang dengan anggun akan diturunkan ke proxy jika IE9 atau kurang digunakan. Anda tidak perlu mengubah kode sama sekali jika Anda menggunakan ASP.NET.
Solusinya ada dalam dua bagian. Yang pertama adalah skrip jquery yang menghubungkan ke pemrosesan ajax jQuery. Ini akan secara otomatis memanggil server web jika permintaan crossDomain dibuat dan browsernya adalah IE:
Di server web Anda, Anda harus menerima permintaan tersebut, mendapatkan nilai dari header http X-CorsProxy-Url dan melakukan permintaan HTTP dan akhirnya mengembalikan hasilnya.
Entri blog saya: http://blog.gauffin.org/2014/04/how-to-use-cors-requests-in-internet-explorer-9-and-below/
sumber
Saya baru saja membuat semua permintaan JSONP karena itu adalah satu-satunya solusi untuk semua browser yang kami dukung (IE7 + dan pelanggan tetap). Ingat, jawaban Anda secara teknis berfungsi untuk IE9 sehingga Anda memiliki jawaban yang benar.
sumber
Membangun solusi dengan MoonScript, Anda dapat mencoba ini sebagai gantinya:
https://github.com/intuit/xhr-xdr-adapter/blob/master/src/xhr-xdr-adapter.js
Manfaatnya adalah karena ini adalah solusi tingkat yang lebih rendah, ini akan mengaktifkan CORS (sejauh mungkin) di IE 8/9 dengan kerangka kerja lain, tidak hanya dengan jQuery. Saya telah berhasil menggunakannya dengan AngularJS, serta jQuery 1.x dan 2.x.
sumber
Mendapatkan JSON lintas domain dengan jQuery di Internet Explorer 8 dan versi yang lebih baru
Tautan yang sangat berguna:
http://graphicmaniacs.com/note/getting-a-cross-domain-json-with-jquery-in-internet-explorer-8-and-later/
Dapat membantu mengatasi masalah mengembalikan json dari Permintaan Domain X.
Semoga ini bisa membantu seseorang.
sumber
Untuk mengatasi masalah ini, periksa juga apakah Anda memiliki beberapa yang disertakan .js ke dalam file ajax Anda yang disebut: Saya menerima kesalahan Akses ditolak saat menyertakan shadowbox.js di ajax.php saya
sumber
Saya sedang menguji layanan web CORS pada mesin dev saya dan mendapatkan pesan kesalahan "Akses ditolak" hanya di IE. Firefox dan Chrome bekerja dengan baik. Ternyata ini disebabkan oleh penggunaan localhost saya di panggilan ajax! Jadi, URL browser saya seperti ini:
http: //komputer_saya.domain_saya.local/CORS_Service/test.html
dan panggilan ajax saya di dalam test.html adalah seperti:
Semuanya berfungsi setelah saya mengubah panggilan ajax untuk menggunakan IP komputer saya, bukan localhost.
Jendela alat pengembang IE "Jaringan" tab juga menampilkan permintaan OPSI Preflight CORS diikuti oleh XMLHttpRequest GET, yang persis seperti yang saya harapkan.
sumber
Diperbarui pada awal 2015. xDomain adalah pustaka yang banyak digunakan untuk mendukung CORS di IE9 dengan pengkodean tambahan terbatas.
https://github.com/jpillora/xdomain
sumber
Coba gunakan plugin jquery-transport-xdr jQuery untuk permintaan CORS di IE8 / 9.
sumber
Catatan - Catatan
jangan gunakan " http://www.domain.xxx " atau " http: // localhost / " atau "IP >> 127.0.0.1" untuk URL di ajax. hanya gunakan jalur (direktori) dan nama halaman tanpa alamat.
keadaan salah:
keadaan sebenarnya:
sumber