2012-04-11 5 views
6

Si tratta di una sorta di problema interdominio, ma il problema è rappresentato dal browser (Chrome) che non sembra seguire il reindirizzamento. Invece, non viene restituito nulla alla chiamata jQuery ajax e viene visualizzato un errore.jQuery chiamata ajax al dominio che reindirizza a un altro dominio (non è seguito)

Sto tentando di utilizzare jQuery.ajax, ma l'URL che sto utilizzando reindirizza a un altro dominio. Quando ciò accade, ottengo un errore. C'è qualcosa di speciale che deve essere fatto in modo che il browser segua il reindirizzamento?

Ho già aggiunto access-control-allow-origin: * all'intestazione del secondo dominio a cui viene reindirizzato.

+0

Puoi aggiungere il codice e l'errore che si vede? –

+0

Non hai il permesso di recuperare i dati da altri domini nel tuo ajax. –

risposta

0

L'unico modo per ottenere una chiamata ajax tra domini è utilizzare jsonp.

In jQuery, impostare il proprio tipo di dati .ajax() su "jsonp". Vedi qui: http://api.jquery.com/jQuery.ajax/

È ancora possibile che non funzioni, se il server a cui viene reindirizzato non è in grado di rispondere a JSONP. La differenza tra una risposta json e una risposta jsonp è che una risposta json è una pura stringa json, mentre una jsonp response è il codice che chiama una funzione che passa in una stringa json.

Un tutorial non troppo malandato: http://remysharp.com/2007/10/08/what-is-jsonp/

Una buona discussione: pagina di reindirizzamento Can anyone explain what JSONP is, in layman terms?

+2

La chiamata ajax tra domini è possibile con Cross-Origin Resource Sharing (CORS) e l'autore ha lavorato con questa tecnologia (come ha indicato l'intestazione "access-control-allow-origin: *".) – vadimk

+0

@vadimk, è possibile fornire una risposta coinvolgere quindi questo approccio. Ma dal post sembra che il problema sia sul lato client. L'approccio 'access-control-allow-origin-with 'con CORS è sul lato server. Anche se il server lo consente, il client non lo ha permesso. Quindi JSONP. –

+0

Jonathan, controlla la mia risposta. La soluzione consiste nell'assicurarsi che la pagina di reindirizzamento abbia le intestazioni di risposta appropriate. – BigMacAttack

1

Un HTTP viene trattato come qualsiasi altra pagina HTTP in cui ha bisogno anche le intestazioni di controllo di accesso. Se la tua pagina di reindirizzamento non li ha, il browser non potrà mai controllare se la pagina da reindirizzare abbia le autorizzazioni appropriate.

Insieme con il Location intestazione della pagina di reindirizzamento, aggiungere anche l'intestazione Access-Control-Allow-Origin e dei suoi componenti correlate (cioè Access-Control-Allow-Methods ecc)

+2

nella tua risposta c'è molta teoria .. un paio di righe di codice per illustrare quello che stai dicendo non ti farà male – abbood