‘Nessun mezzo di Trasporto’ Errore w/ jQuery, ajax, chiamate in IE

Ho bisogno di utilizzare foursquare API per la ricerca locali. Naturalmente è cross-domain.

Non ha problemi in Firefox, ma in Internet Explorer (7, 8, 9, ho testato).

Mio codice javascript sembra:

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 dati ricevuti.
In Internet Explorer, registra su console:

No Transport
Error
Error

Cosa devo fare?

InformationsquelleAutor Sang | 2012-02-06



4 Replies
  1. 263

    Ho provato 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 questo:

    $.support.cors = true;

    e Ajax cross di dominio, le richieste di lavoro!

    • questo non funziona per il browser IE… uno Può please help me funziona su IE
    • Nel mio caso, ho dovuto aggiungere ‘intrasettoriali: true,’ la .ajax chiamata di metodo in ordine per questo lavoro.
    • Funziona anche HTA
    • Grazie. Dopo l’applicazione di questo, ora sto ottenendo statusText come "Error: Access is denied.\r\n" su IE9. Qualsiasi indovina? Nulla catturato in rete.
    • Io sono sempre ‘Errore: Accesso negato’ anche su IE8 e IE9
    • È un po ‘ scoraggiante che il accettato la risposta, che in realtà non risolve il problema di IE8 o IE9.
    • Ho un problema simile. Opere in IE10, ma non in IE8 o IE9
    • Ho anche avuto un “Errore: Accesso negato”, il mio errore è stato che ho tirato il contenuto HTTPS HTTP dominio. Assicuratevi che il vostro sito e il vostro ajax obiettivo che usa gli stessi protocolli (HTTP O HTTPS)
    • Credo che questo sia impostato di default ora. Per me la soluzione è stata un XDR richiesta di trasporto – vedere questa famosa risposta: stackoverflow.com/a/10232313/217866
    • Vorrei anche suggerire di controllare le intestazioni di url inviato una richiesta per. Se possibile il cammino.

  2. 13
    jQuery.support.cors = true;
    
    $.ajax({
      crossDomain: true,
      url: "",
      type: "POST",
      dataType: "xml",
      data: soapMessage,
    });

    è necessario effettuare il cross domain valore vero

    • Qual è la differenza tra la tua risposta e accettato, che è stato pubblicato un bel po ‘ di tempo prima che il vostro?
    • L’aggiunta di crossDomain: true per l’argomento di opzioni.
    • Che cosa è la croce di dominio e perché è necessario per essere vero?
    • Non hai bisogno di crossDomain: true che $.support.cors fa di default se non sbaglio
  3. 7

    Questo problema è stato bugging me per qualche tempo. Come soluzione alternativa io uso proxy script che si trovano sullo stesso sito. Tali script semplicemente eseguire server-to-server non-ajax richiesta HTTP (si pensi curl e WinHttp.WinHttpRequest) e lo stato superato e i dati di ritorno 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 descritte sopra, piu ‘Access-Control-Allow-Origin’ intestazione.

    $.support.cors = true; //this must precede $.ajax({}) configuration
    
    $.ajax({
      crossDomain: true, //added in jQuery 1.5
      headers: {
        'Access-Control-Allow-Origin': '*'
      },
      ...
    });

    Servizio web che risponde a queste chiamate, inoltre, risponde con ‘Access-Control-Allow-Origin: * intestazione (header).

    • A questa domanda ha avuto una soluzione accettata da più di 2 anni…
    • … e questa è la prima risposta citare il CORS di intestazione. La soluzione accettata non ha funzionato per me.
    • Credo che questo, invece, dovrebbe essere nel web.config del servizio.
  4. 6

    Provare questa soluzione:

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

    O, semplicemente inserire questo codice nel tuo HTML destra dopo l’inclusione di 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]-->

Lascia un commento