Je dois utiliser l'API foursquare pour rechercher des lieux. Bien sûr, c'est inter-domaine.
Il n’ya aucun problème dans Firefox mais dans Internet Explorer (7, 8, 9 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?
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/1066
La solution est simple, il suffit de définir ceci:
$.support.cors = true;
et les demandes inter-domaines Ajax fonctionneront!
jQuery.support.cors = true;
$.ajax({
crossDomain: true,
url: "",
type: "POST",
dataType: "xml",
data: soapMessage,
});
vous devez définir la valeur de domaine croisé sur true
Ce 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. De tels scripts exécutent simplement une requête HTTP serveur à serveur non ajax (pensez à curl et WinHttp.WinHttpRequest) et transmettent le statut et les données à l'appelant. Cela fonctionne, mais visiblement pas très efficace car il doit exécuter deux requêtes HTTP.
Dans mon cas, la solution est une combinaison de tout ce qui est décrit ci-dessus, plus l'en-tête 'Access-Control-Allow-Origin'.
$.support.cors = true; // this must precede $.ajax({}) configuration
$.ajax({
crossDomain: true, // added in jQuery 1.5
headers: {
'Access-Control-Allow-Origin': '*'
},
...
});
Le service Web qui répond à ces appels répond également avec l'en-tête 'Access-Control-Allow-Origin: *'.
Essayez cette solution:
https://stackoverflow.com/a/14463975/237091
Ou simplement, mettez ce code dans votre code HTML après avoir ajouté jquery.
<!--[if lte IE 9]>
<script type='text/javascript' src='//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js'></script>
<![endif]-->