web-dev-qa-db-fra.com

'No Transport' Error avec / jQuery ajax call in IE

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?

110
Sang

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!

264
Magico
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

13
amit thakur

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: *'.

7
Alex D

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]-->
6
Scott Stafford