Do wyszukiwania miejsc potrzebuję interfejsu foursquare API. Oczywiście jest to międzydomenowe.
Nie ma żadnych problemów w Firefoksie, ale w Internet Explorerze (7, 8, 9 testowałem).
Mój kod javascript wygląda tak:
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);
}
});
}
W przeglądarce Firefox doskonale wyświetla otrzymane dane. W przeglądarce Internet Explorer loguje się na konsoli:
No Transport
Error
Error
Co powinienem zrobić?
ajax
internet-explorer
jquery
cross-domain
Śpiewał
źródło
źródło
Odpowiedzi:
Przetestowałem to na Windows Mobile 7.
Po DUŻO czasu spędzonego na zrozumieniu, w końcu znalazłem to:
http://bugs.jquery.com/ticket/10660
Rozwiązanie jest proste, po prostu ustaw to:
a żądania między domenami Ajax będą działać!
źródło
musisz ustawić wartość między domenami na true
źródło
crossDomain: true
do argumentu opcji.crossDomain: true
tego$.support.cors
robić domyślnie, jeśli się nie mylęTen problem trapi mnie od jakiegoś czasu. Aby obejść ten problem, używam skryptów proxy znajdujących się w tej samej witrynie. Takie skrypty po prostu wykonują żądanie HTTP z serwera do serwera bez AJAX (pomyśl o curl i WinHttp.WinHttpRequest) i przekazują status i dane z powrotem do wywołującego. Działa, ale oczywiście niezbyt wydajne, ponieważ musi wykonać dwa żądania HTTP.
W moim przypadku rozwiązaniem jest połączenie wszystkich rzeczy opisanych powyżej z nagłówkiem „Access-Control-Allow-Origin”.
Usługa internetowa, która odpowiada na te wezwania, również odpowiada nagłówkiem „Access-Control-Allow-Origin: *”.
źródło
Wypróbuj to rozwiązanie:
https://stackoverflow.com/a/14463975/237091
Lub po prostu umieść ten kod w swoim HTML zaraz po włączeniu jquery.
źródło
Właśnie zmieniłem wersję jquery i podmieniłem łącze CDN i zadziałało! Po prostu zrób to, jeśli
crossDomain:true
i$.support.cors
= prawda nie działa.źródło