Come sapete, la sicurezza del browser Web non consente di effettuare richieste interdominio. Ho letto un libro che dice che dovresti usare XMLHTTPRequest solo se puoi mettere i file sul server (significa mettere la pagina che caricerai nello stesso dominio richiesto). Se non puoi – dovresti cercare un’alternativa.
Le mie domande sono :
EDIT: Non mi è ancora chiaro …
Ad esempio, estraggo la mia pagina da www.domain1.com e devo richiedere javascript da www.domain2.com . Quindi la pagina tirata dovrebbe includere qualcosa come:
per evitare le restrizioni del dominio incrociato.
E posso usare JSONP, e la richiesta sarà simile a: http://ww.domain1.com/?callback=someFunction.js
Ma: non è lo stesso? Prendo solo js da un altro dominio! Evita le restrizioni del dominio incrociato?
È ansible effettuare richieste di domini incrociati utilizzando l’object XMLHttpRequest
. Questo viene fatto usando qualcosa chiamato “Cross Origin Resource Sharing”. Vedi: http://en.wikipedia.org/wiki/Cross-origin_resource_sharing
Molto semplicemente, quando la richiesta viene effettuata sul server, il server può rispondere con un’intestazione Access-Control-Allow-Origin
che consente o rifiuta la richiesta. Il browser deve controllare questa intestazione e se è consentita, continuerà con il processo di richiesta. In caso contrario, il browser annullerà la richiesta.
Puoi trovare ulteriori informazioni e un esempio operativo qui: http://www.leggetter.co.uk/2010/03/12/making-cross-domain-javascript-requests-using-xmlhttprequest-or-xxaintainquest.html
JSONP è una soluzione alternativa, ma potresti obiettare che è un po ‘un trucco.
Effettua una chiamata AJAX interdominio
Il tuo servizio web deve supportare l’iniezione di metodi per fare JSONP.
Il tuo codice sembra buono e dovrebbe funzionare se i tuoi servizi web e la tua applicazione web sono ospitati nello stesso dominio.
Quando si esegue $ .ajax con dataType: ‘jsonp’ significa che jQuery sta effettivamente aggiungendo un nuovo parametro all’URL della query.
Ad esempio, se il tuo URL è http://10.211.2.219:8080/SampleWebService/sample.do
allora jQuery aggiungerà? Callback = {some_random_dynamically_generated_method}.
Questo metodo è più gentile di un proxy effettivamente collegato nell’object finestra. Questo non è nulla di specifico ma assomiglia a qualcosa del genere:
window.some_random_dynamically_generated_method = function(actualJsonpData) { //here actually has reference to the success function mentioned with $.ajax //so it just calls the success method like this: successCallback(actualJsonData); }
Controlla quanto segue per ulteriori informazioni
Crea una richiesta JSONP ajax tra più domini con jQuery
Se sei disposto a trasmettere alcuni dati e non hai bisogno di essere protetto (nessuna informazione pubblica) puoi usare un proxy CORS, è molto semplice, non dovrai modificare nulla nel tuo codice o sul lato server (specialmente non è il tuo server come l’API di Yahoo o OpenWeather). L’ho usato per recuperare i file JSON con un XMLHttpRequest e ha funzionato bene.