Se Javascript è autorizzato ad accedere agli script dallo stesso dominio, come può un sito Web creare mashup che devono leggere e modificare il contenuto da un altro dominio?
Se Javascript è autorizzato ad accedere agli script dallo stesso dominio, come può un sito Web creare mashup che devono leggere e modificare il contenuto da un altro dominio?
Se l'API a cui stai tentando di accedere supporta JSONP , devi solo fornire un nome funzione javascript nella tua richiesta, quindi il JSONP restituisce javascript come myfunc({the:data});
che puoi eseguire come javascript regolare, ecco perché dovresti creare un nuovo tag <script src="www.website.com/somecall?jsonp=myfunc">
per "inviare una richiesta" (jQuery lo fa automaticamente se usi type: jsonp
in% richieste di$.ajax
).
Lo svantaggio è che richiede il provider dell'API per supportare JSONP.
Flash può accedere ai contenuti tra domini finché il sito web di destinazione ha un file crossdomain.xml
nella radice che dice che lo consente, che di solito è il caso sui server che forniscono un'API).
Lo svantaggio è che richiede Flash nel browser dell'utente e che il sito web dal quale si ottengono i dati deve avere un crossdomain.xml che consente le richieste tra domini.
I linguaggi lato server come PHP non hanno restrizioni dello stesso dominio BS, quindi potresti avere uno script che funge da proxy (ad esempio, scaricare tramite una delle estensioni http come cURL).
Il vantaggio ulteriore è che puoi pulire i dati (o persino mashup di più fonti) sul server, prima di inviarli alla tua pagina web / javascript, in modo da poter estrarre solo la parte utile dei dati, che è piacevole quando fare webapp mobile dove la larghezza di banda può essere un problema.
Lo svantaggio è che tutte le richieste devono passare attraverso il tuo server, in modo che aumenti il carico sul tuo server.
Tuttavia, il vantaggio è che funzionerebbe con qualsiasi risorsa in quanto non richiede che l'obiettivo supporti il crossdomain o jsonp. Quindi se nient'altro funziona, lo farebbe.
Internet Explorer ha Richiesta interdominio
Firefox 3.5+ ha lo standard di condivisione incrociata , ma richiede la risorsa a cui stai tentando di accedere includere intestazioni speciali, ad es in PHP:
header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");
Alcuni altri principali browser supportano anche questo , quindi se non hai bisogno di supportare i vecchi browser e se riesci a ottenere le risorse a cui stai cercando di accedere per inviare quelle intestazioni, questa potrebbe essere la soluzione migliore, altrimenti lo script sul lato server sarebbe la mia raccomandazione.
Firefox ha anche un'impostazione utente capability.policy.default.XMLHttpRequest.open
, ma non conterei sull'utente che modifica un'impostazione nel suo browser.
Puoi usare l'API (di un altro dominio) per quello. Il tuo Javascript chiamerà il file PHP (o altro file di script) che si trova sul tuo server web (il tuo dominio), che chiamerà l'API (di un altro dominio usando CURL) e ti risponderà.
Leggi altre domande sui tag web-development javascript web-applications