Tentativo di utilizzare ajax
, getJSON
e funzioni simili per recuperare un URL esterno da un computer di sviluppo locale (non server). C'è un modo per aggirare lo stesso criterio di origine, in modo che io possa testare localmente, invece di dover caricare su un server?C'è un modo per aggirare la stessa politica di origine di Javascript/jQuery per l'accesso locale?
risposta
Poiché si tratta di un problema di sviluppo e non un problema per l'utente finale/funzionalità, piuttosto che concentrarsi su come ottenere AJAX per attraversare i domini ottenere il vostro ambiente di sviluppo impostati come proxy per recuperare i dati più recenti dai server di produzione. Questo è veramente facile da fare.
È necessario configurare un server Web nel proprio ambiente di sviluppo (se non ce l'ha già), quindi configurare il server per rispondere a 404 richieste recuperando e quindi facendo eco ai dati di produzione. È possibile configurare il server in modo che vengano prelevati solo i file di dati AJAX (in caso contrario, sarà complicato eseguire il debug di altri file se le risorse di produzione iniziano a essere visualizzate nelle pagine di sviluppo). Quindi, se manca http://dev.myserver.com/data/json/mydata.json
, lo script 404 riceverà http://prod.myserver.com/data/json/mydata.json
e lo farà eco al client. La cosa bella di questo set-up è che puoi usare i dati mock molto facilmente: se il file è presente nell'ambiente di sviluppo, lo script AJAX lo otterrà; ma se poi cancelli o rinomina quel file, otterrai i dati di produzione. Questa funzione è stata così utile che non posso raccomandarla abbastanza.
Se si lavora con XML, io consiglierei di duplicare le intestazioni HTTP in 404. Se il processo di 404 risponde con un Content-Type
di text/html
, non sarà possibile ottenere alcun responseXML
da analizzare.
Abbiamo avuto lo stesso bisogno nello sviluppo della nostra app web. Ecco come l'abbiamo fatto:
Il browser e il server comunicano solo tramite JSON.
Tutto il codice HTML viene visualizzato nel browser utilizzando PURE (il nostro motore di template JS).
Il codice del browser è sviluppato a livello locale in questo modo:
aggiungiamo un parametro host
nell'url del app:
http://localhost/app.html?host=test.beebole-apps.com
Nella produzione, il JSON vengono inviati al server con un POST.
Ma qui la funzione responsabile della chiamata ajax reagirà al parametro host
e farà invece un'iniezione JSONP (GET).
<script src="http://test.beebole-apps.com/?callback=f2309892&json={...}" />
f2309892
è una funzione temporanea, con un nome casuale, che punta al metodo che gestirà la rispostajson
è il JSON inviamo al server
Significa Avrai bisogno di una certa collaborazione dal backend per servirti il json avvolto in una funzione di callback come:
f2309892(/*the json here*/);
Tranne una limitazione di dimensioni (non è possibile inviare un grande JSON al server con un GET) funziona come un gioco da ragazzi.
Un altro vantaggio è che è possibile chiamare tutti i diversi sistemi (sviluppo e test) dallo stesso host locale.
Ecco la risposta semplice: cromo --disable-web-sicurezza
Dal codice sorgente (chrome_switches.h):
// Don't enforce the same-origin policy. (Used by people testing their sites.)
const char kDisableWebSecurity[] = "disable-web-security";
ho voluto usare jquery.js per inviare chiamate AJAX per un server python di Google Apps in esecuzione sulla porta 8080. Solo per il test, volevo eseguire il browser e il server sulla stessa macchina.
Non capisco tutte le sfumature di sicurezza, ma per lo sviluppo temporaneo sembra una soluzione ragionevole. Finché utilizzo solo chrome per il test con questo flag, non dovrebbe essere un problema.
Ecco l'intero comando per Mac OS X:
/Applicazioni/Google \ Chrome.app/Contents/MacOS/Google \ Chrome --disable-web-sicurezza
Ricordarsi di uccidere tutte le istanze del processo chrome prima di fare questo o non funzionerà. – Ferruccio
ho avuto quel problema, anche , l'utilizzo di Chrome e l'opzione --allow-file-access-from-files
non sono di grande aiuto. Torna allo script mio server aveva bisogno di tornare, ho aggiunto queste intestazioni alla risposta ed ha funzionato benissimo:
'Access-Control-Allow-Origin: http://localhost/'
e un altro per consentire una sorta di scambio di chiavi
'Access-Control-Allow-Headers: X-KEY'
Senza toccare il server -
Il modo più rapido e semplice per ignorare la stessa politica di sicurezza dell'origine in Firefox è l'installazione del componente aggiuntivo Force CORS. Questo funziona con qualsiasi servizio inserendo le intestazioni appropriate in ogni risposta.
Vale la pena ricordare che dopo l'installazione devi fare clic su Visualizza => barre degli strumenti => barra aggiuntiva. Quindi il pulsante cors mostrerà in basso a destra per attivarlo. Ho decompresso l'xpi e vedo che c'è una funzione di commutazione quando si preme un pulsante ma non si vede mai il pulsante. – HMR
localhost non è consentito usare in CORS http://code.google.com/p/chromium/issues/detail?id=67743 uso lvh.me invece
questo è grande! noto che non hai questo uso locale di PURE in http://beebole.com/pure/documentation/what-is-pure-and-why/ ... Inoltre, puoi espandere un po 'le tue parole per scrivere un tutorial in http://beebole.com/pure/documentation/? – ina
anche (solo per essere sicuri) - 'http: //localhost/app.html? Host = test.beebole-apps.com' è sul lato client (dove il client scarica un'applicazione con qualche tipo di server web o URL paser in esso ...) e chiama il server 'test.beebole-apps.com'? – ina
PURE è una libreria JS che crea HTML da dati JSON. Funziona sul browser. Se scarichi il file zip, c'è una directory chiamata tutorial con alcuni esempi. – Mic