2012-03-27 4 views
6
jQuery.ajax({ 
      type: "GET", 
      url: 'http://example.com/restaurant/VeryLogin(username,password)', 
      dataType: "json", 

      success: function (data) { 
       alert(data); 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       alert("error"); 
      } 
     }); 

segnala il successo, ma i dati erano nulli. L'URL restituisce i dati xml, se specifichiamo il dataType possiamo ottenere i dati JSON, ma qui non è stato possibile ottenere alcun dato.come chiamare la web API cross-domain usando ajax?

Qualsiasi aiuto apprezzato.

risposta

9

Javascript è soggetto alla stessa politica di dominio. Ciò significa che per la sicurezza uno script JS in un browser client può accedere allo stesso dominio da cui proviene.

JSONP non è soggetto alle stesse restrizioni.

Controllare la documentazione jQuery su JSONP qui:

http://api.jquery.com/jQuery.getJSON/

Ecco un esempio di lavoro di utilizzare JSONP per accedere a un servizio di cross-domain tramite JQuery AJAX:

http://jsbin.com/idasay/4

E nel caso in cui JSBIN cancelli questa pasta in futuro:

jQuery.ajax({ 
    type: "GET", 
    url: 'http://api.geonames.org/postalCodeLookupJSON?postalcode=6600&country=AT&username=demo', 
    dataType: "jsonp", 
    cache: false, 
    crossDomain: true, 
    processData: true, 


    success: function (data) { 
     alert(JSON.stringify(data)); 
    }, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     alert("error"); 
    } 
}); 
+0

ho già seguito il collegamento, ma non ha prodotto il risultato. – tiru

+0

Dal collegamento pubblicato in precedenza: "A causa delle restrizioni di sicurezza del browser, la maggior parte delle richieste" Ajax "sono soggette alla stessa politica di origine, la richiesta non può recuperare correttamente i dati da un dominio, sottodominio o protocollo diverso. Script e richieste JSONP non sono soggetti alle stesse restrizioni sulla politica di origine. " –

+0

Vorrei consigliare come ottenere ciò che è necessario utilizzando l'esempio JSONP al link precedente. –

0

Cercare il tipo di dati jsonp.

jQuery.ajax({ 
     type: "GET", 
     url: 'http://xxx.com/restaurant/VeryLogin(username,password)', 
     dataType: "jsonp", 
    cache: false, 
     crossDomain: true, 
    processData: true, 

     success: function (data) { 
      alert(data); 
     }, 
     error: function (XMLHttpRequest, textStatus, errorThrown) { 
      alert("error"); 
     } 
    }); 
+0

ho seguito il tuo dado modifiche nessun risultato ancora. – tiru

+0

È necessario leggere su jsonp. Eppure, la pagina che stai chiamando non sta restituendo dati jsonp. –

2

E 'impossibile usare Ajax per ottenere i dati tra domini direttamente senza cambiare backend. Si chiama Same origin policy.

È possibile impostare l'intestazione speciale Access-Control-Allow-Origin nel backend (how do to this). Oppure puoi usare JSONP] (http://en.wikipedia.org/wiki/JSONP).