Ich muss die foursquare API verwenden, um nach Veranstaltungsorten zu suchen. Natürlich ist es domänenübergreifend.
Es gibt keine Probleme in Firefox, aber in Internet Explorer (7, 8, 9, die ich getestet habe).
Mein Javascript-Code sieht aus wie:
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);
}
});
}
In Firefox werden empfangene Daten perfekt angezeigt. In Internet Explorer wird die Konsole angemeldet:
No Transport
Error
Error
Was soll ich machen?
Antworten:
Ich habe dies unter Windows Mobile 7 getestet.
Nachdem ich viel Zeit zum Verstehen aufgewendet hatte, fand ich endlich Folgendes:
http://bugs.jquery.com/ticket/10660
Die Lösung ist einfach, stellen Sie einfach Folgendes ein:
und domänenübergreifende Ajax-Anfragen funktionieren!
quelle
Sie müssen den domänenübergreifenden Wert auf true setzen
quelle
crossDomain: true
zum Optionsargument .crossDomain: true
, was$.support.cors
standardmäßig funktioniert, wenn ich mich nicht irreDieses Problem nervt mich schon seit einiger Zeit. Um dieses Problem zu umgehen, verwende ich Proxy-Skripte, die sich auf derselben Site befinden. Solche Skripte führen einfach eine Nicht-Ajax-HTTP-Anforderung von Server zu Server aus (denken Sie an Curl und WinHttp.WinHttpRequest) und geben Status und Daten an den Anrufer zurück. Es funktioniert, ist aber offensichtlich nicht sehr effizient, da zwei HTTP-Anforderungen ausgeführt werden müssen.
In meinem Fall ist die Lösung eine Kombination aus allen oben beschriebenen Dingen und dem Header 'Access-Control-Allow-Origin'.
Der Webdienst, der diese Anrufe beantwortet, antwortet auch mit dem Header 'Access-Control-Allow-Origin: *'.
quelle
Versuchen Sie diese Lösung:
https://stackoverflow.com/a/14463975/237091
Oder fügen Sie diesen Code einfach direkt nach dem Einfügen von jquery in Ihren HTML-Code ein.
quelle
Ich habe gerade die jquery-Version geändert und den CDN-Link ersetzt und es hat funktioniert! Mach es einfach, wenn
crossDomain:true
und$.support.cors
= wahr nicht funktioniert.quelle