<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js" type="text/javascript"></script>
<script>
$.get("http://example.com/", function(data) {
alert(data);
});
</script>
itu melakukan permintaan PILIHAN ke URL itu, dan kemudian panggilan balik tidak pernah dipanggil dengan apa pun.
Ketika tidak lintas domain, itu berfungsi dengan baik.
Tidakkah seharusnya jQuery hanya melakukan panggilan dengan sebuah <script>
node dan kemudian melakukan panggilan balik saat itu dimuat? Saya mengerti bahwa saya tidak akan bisa mendapatkan hasilnya (karena itu lintas domain), tapi tidak apa-apa; Saya hanya ingin panggilan itu masuk. Apakah ini bug, atau saya melakukan sesuatu yang salah?
jquery
xmlhttprequest
http-get
http-options-method
Paul Tarjan
sumber
sumber
Jawaban:
Menurut MDN ,
sumber
OPSI berasal dari http://www.w3.org/TR/cors/ Lihat http://metajack.im/2010/01/19/crossdomain-ajax-for-xmpp-http-binding-made-easy/ untuk sedikit info lebih lanjut
sumber
Jika Anda mencoba POST
Pastikan untuk
JSON.stringify
data formulir Anda dan kirim sebagaitext/plain
.sumber
Saya tidak percaya jQuery secara alami akan melakukan permintaan JSONP ketika diberi URL seperti itu. Namun, itu akan melakukan permintaan JSONP ketika Anda memberi tahu argumen apa yang digunakan untuk panggilan balik:
Semuanya bergantung pada skrip penerima untuk menggunakan argumen itu (yang tidak harus disebut "jsoncallback"), jadi dalam hal ini fungsinya tidak akan pernah dipanggil. Tapi, karena Anda menyatakan ingin mengeksekusi skrip di metaward.com, itu akan membuatnya.
sumber
Faktanya, permintaan lintas-domain AJAX (XMLHttp) tidak diizinkan karena alasan keamanan (pikirkan tentang mengambil laman web "terbatas" dari sisi klien dan mengirimkannya kembali ke server - ini akan menjadi masalah keamanan).
Satu-satunya solusi adalah callback. Ini adalah: membuat objek skrip baru dan mengarahkan src ke JavaScript sisi-akhir, yang merupakan panggilan balik dengan nilai JSON (myFunction ({data}), myFunction adalah fungsi yang melakukan sesuatu dengan data (misalnya, menyimpannya dalam suatu variabel).
sumber
Cukup ubah "application / json" menjadi "text / plain" dan jangan lupa JSON.stringify (permintaan):
sumber
Saya memiliki masalah yang sama. Perbaikan saya adalah menambahkan header ke skrip PHP saya yang hanya ada ketika di lingkungan dev.
Ini memungkinkan permintaan lintas domain:
Ini memberi tahu permintaan preflight bahwa klien boleh mengirim header apa pun yang diinginkan:
Dengan cara ini tidak perlu mengubah permintaan.
Jika Anda memiliki data sensitif dalam database dev Anda yang berpotensi bocor, maka Anda mungkin berpikir dua kali tentang ini.
sumber
Dalam kasus saya, masalah ini tidak terkait dengan CORS karena saya mengeluarkan jQuery POST ke server web yang sama. Data itu JSON tapi saya telah menghilangkan dataType: parameter 'json'.
Saya tidak memiliki (juga saya tidak menambahkan) parameter contentType seperti yang ditunjukkan pada jawaban David Lopes di atas.
sumber
Itu tampak seperti Firefox dan Opera (diuji pada mac juga) tidak suka lintas domainness ini (tetapi Safari baik-baik saja dengan itu).
Anda mungkin harus memanggil kode sisi server lokal untuk meringkuk halaman jarak jauh.
sumber
Saya dapat memperbaikinya dengan bantuan header berikut
Jika Anda menggunakan Nodejs, ini adalah kode yang dapat Anda salin / tempel.
sumber