Come posso utilizzare JSON sulla pagina web da una fonte con nessuno, né CORS JSONP?

voti
19

Alcuni servizi dati JSON su Internet sono stati progettati per essere consumati solo da server e trascurare la possibilità di essere consumato direttamente da una web app-only.

A causa di problemi di cross-site, tali servizi avrebbero funzionato se sia fornito un JSONPformato o abilitare CORSil supporto.

Voglio fare un piccolo strumento JavaScript che può chiamare una risorsa online che restituisce solo JSONe non, e non supporta.

Un caso esempio è un'applicazione singola pagina che stavo facendo per la quale l'unica fonte di dati che ho trovato non ha fornito CORSo JSONP. Essendo una pagina singola app, non aveva alcun server del proprio così era soggetta alla politica stessa origine.

Quali strategie sono disponibili in questi casi?

È pubblicato 16/12/2011 alle 15:05
fonte dall'utente
In altre lingue...                            


1 risposte

voti
36

** Un modo è quello di trovare un proxy che può accedere a una JSONfonte di dati e poi servire al vostro web app trasformata per lavorare con JSON, CORSo qualsiasi altro formato che è possibile gestire senza preoccuparsi di problemi di cross-site.

Uno di questi proxy è di Yahoo "YQL" .

YQL supporta sia JSONP e CORS.

Così, se il browser supporta anche CORS si può pensare ad esso come un JSON liberi di proxy server JSON. Se no, allora è anche un JSON libero di JSONP delega:

Ecco un esempio di come l'ho usato con jQuery:

$.getJSON("http://query.yahooapis.com/v1/public/yql",
  {
    q:      "select * from json where url=\"http://airportcode.riobard.com/airport/" + code + "?fmt=JSON\"",
    callback: gotJSON, // you don't even need this line if your browser supports CORS
    format: "json"
  },
  function(data){
    if (data.query.results) {
      /* do something with
        data.query.results.json.code
        data.query.results.json.name
        data.query.results.json.location
      */
    } else {
      /* no info for this code */
    }
  }
);

E una versione su jsfiddle ...

Risposto il 20/12/2011 a 15:06
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more