2012-02-06 15 views
107

Ho bisogno di utilizzare API foursquare per cercare sedi. Certo che è cross-domain.Errore 'Nessun trasporto' w/jQuery chiamata ajax in IE

Non ha alcun problema in Firefox ma in Internet Explorer (7, 8, 9 ho provato).

Il mio codice javascript assomiglia:

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, perfettamente visualizza i dati ricevuti. In Internet Explorer, si accede console:

No Transport 
Error 
Error 

Cosa devo fare?

+6

Scopri i migliori risposte per [questo post SO] (http://stackoverflow.com/questions/5241088/jquery-call-to-webservice-returns-no-transport-error) – mkozicki

risposta

255

Ho testato questo su Windows Mobile 7.

Dopo un sacco di tempo speso per capire, finalmente ho trovato questo:

http://bugs.jquery.com/ticket/10660

la soluzione è semplice, basta impostare questa:

$.support.cors = true; 

e le richieste di domini incrociati Ajax funzioneranno!

+1

funzionato come un fascino . Molto apprezzato. – AndrewHenderson

+0

Perfetto !! Grazie ! –

+7

questa è magia !!! – ygaradon

12
jQuery.support.cors = true; 

$.ajax({ 
    crossDomain: true, 
    url: "", 
    type: "POST", 
    dataType: "xml", 
    data: soapMessage, 
}); 

è necessario per rendere il valore di dominio croce su true

+8

Qual è la differenza tra la tua risposta e quella accettata, che è stata postata un po 'di tempo prima della tua? – javanna

+2

@javanna L'aggiunta di 'crossDomain: true' all'argomento delle opzioni. –

+8

Che cos'è il dominio incrociato e perché è necessario che sia vero? –

7

Questo problema è stato bugging me per un po 'di tempo. Come soluzione alternativa, utilizzo script proxy situati nello stesso sito. Tali script eseguono semplicemente la richiesta HTTP non-ajax server-to-server (pensate a curl e WinHttp.WinHttpRequest) e passate lo stato e i dati al chiamante. Funziona, ma ovviamente non è molto efficiente perché deve eseguire due richieste HTTP.

Nel mio caso, la soluzione è una combinazione di tutte le cose sopra descritte più l'intestazione "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': '*' 
    }, 
    ... 
}); 

Il servizio web che risponde a queste chiamate anche risponde con 'Access-Control-Allow-Origin: *' intestazione.

+1

Questa domanda ha una soluzione accettata da più di 2 anni ... –

+4

... e eppure questa è la prima risposta a menzionare l'intestazione CORS. La soluzione accettata non ha funzionato per me. – seanhodges

+2

Suppongo che questo dovrebbe essere piuttosto nel web.config del servizio. – Fjodr

5

provare questa soluzione:

https://stackoverflow.com/a/14463975/237091

Oppure, semplicemente inserire questo codice nel codice HTML subito dopo tra cui 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]--> 
+0

Ho riscontrato lo stesso problema che si verifica in Chrome (e possibilmente nel browser Android) su Android, quindi forse lascia fuori il commento condizionale per consentire a tutti i browser di utilizzare questo script. (La home page del progetto è qui: https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest) –

+1

Questo ha funzionato per me. Oltre a verificare che il tipo di contenuto della risposta sia "text/plain" –

+0

l'ho aggiunto in grunt dopo jquery e ora funziona (https://www.npmjs.com/package/jquery-ajax-transport-xdomainrequest) . – tobias47n9e

Problemi correlati