J'ai besoin d'utiliser l'API foursquare pour rechercher des lieux. Bien sûr, c'est interdomaine.
Il n'a aucun problème dans Firefox mais dans Internet Explorer (7, 8, 9 que j'ai testé).
Mon code javascript ressemble à:
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);
}
});
}
Dans Firefox, il affiche parfaitement les données reçues. Dans Internet Explorer, il se connecte à la console:
No Transport
Error
Error
Que devrais-je faire?
ajax
internet-explorer
jquery
cross-domain
A chanté
la source
la source
Réponses:
J'ai testé cela sur Windows Mobile 7.
Après BEAUCOUP de temps passé à comprendre, j'ai finalement trouvé ceci:
http://bugs.jquery.com/ticket/10660
La solution est simple, il suffit de définir ceci:
et les demandes de domaine croisé Ajax fonctionneront!
la source
vous devez faire en sorte que la valeur interdomaine soit vraie
la source
crossDomain: true
à l'argument options.crossDomain: true
de ce que$.support.cors
fait par défaut si je ne me trompe pasCe problème me dérange depuis un certain temps. Pour contourner le problème, j'utilise des scripts proxy situés sur le même site. Ces scripts exécutent simplement une requête HTTP non ajax de serveur à serveur (pensez à curl et WinHttp.WinHttpRequest) et transmettent le statut et les données à l'appelant. Cela fonctionne, mais évidemment pas très efficace car il doit effectuer deux requêtes HTTP.
Dans mon cas, la solution est une combinaison de toutes les choses décrites ci-dessus plus l'en-tête 'Access-Control-Allow-Origin'.
Le service Web qui répond à ces appels répond également avec l'en-tête «Access-Control-Allow-Origin: *».
la source
Essayez cette solution:
https://stackoverflow.com/a/14463975/237091
Ou, mettez simplement ce code dans votre HTML juste après avoir inclus jquery.
la source
J'ai juste changé la version de jquery et remplacé le lien CDN et cela a fonctionné! Faites-le simplement si
crossDomain:true
et$.support.cors
= vrai ne fonctionne pas.la source