Saya perlu menggunakan API foursquare untuk mencari tempat. Tentu saja ini lintas domain.
Tidak ada masalah di Firefox tetapi di Internet Explorer (7, 8, 9 saya sudah menguji).
Kode javascript saya terlihat seperti:
searchVenues: function(searchQuery) {
$.ajax({
url: 'https://api.foursquare.com/v2/venues/search',
data: {
sw: bound_south_west,
ne: bound_north_east,
query: searchQuery.query,
oauth_token: FSQ_OAUTH_TOKEN,
limit: 25,
intent: 'browse',
v: 20120206
},
cache: false,
dataType: 'json',
success: function(data) {
displayResults(data, searchQuery.query);
},
error: function(xhr, status, errorThrown) {
console.log(errorThrown+'\n'+status+'\n'+xhr.statusText);
}
});
}
Di Firefox, ini dengan sempurna menampilkan data yang diterima. Di Internet Explorer, itu log di konsol:
No Transport
Error
Error
Apa yang harus saya lakukan?
Jawaban:
Saya menguji ini di Windows Mobile 7.
Setelah BANYAK waktu yang dihabiskan untuk memahami, akhirnya saya menemukan ini:
http://bugs.jquery.com/ticket/10660
Solusinya sederhana, cukup atur ini:
dan permintaan lintas domain Ajax akan berfungsi!
sumber
Anda perlu membuat nilai lintas domain menjadi benar
sumber
crossDomain: true
argumen opsi.crossDomain: true
itu yang$.support.cors
dilakukan secara default jika saya tidak salahMasalah ini telah mengganggu saya selama beberapa waktu. Sebagai solusi, saya menggunakan skrip proxy yang terletak di situs yang sama. Skrip semacam itu cukup mengeksekusi permintaan HTTP non-ajax server-ke-server (pikirkan curl dan WinHttp.WinHttpRequest) dan meneruskan status dan data kembali ke pemanggil. Ini berfungsi, tetapi jelas tidak terlalu efisien karena harus melakukan dua permintaan HTTP.
Dalam kasus saya, solusinya adalah kombinasi dari semua hal yang dijelaskan di atas ditambah header 'Access-Control-Allow-Origin'.
Layanan web yang menjawab panggilan ini juga merespons dengan header 'Access-Control-Allow-Origin: *'.
sumber
Coba solusi ini:
https://stackoverflow.com/a/14463975/237091
Atau, cukup letakkan kode ini di HTML Anda tepat setelah memasukkan jquery.
sumber
Saya baru saja mengubah versi jquery dan mengganti tautan CDN dan berhasil! Lakukan saja jika
crossDomain:true
dan$.support.cors
= true tidak berfungsi.sumber