2009-06-04 9 views
9

Sto scrivendo un indicatore di avanzamento del caricamento basato su Javascript. Voglio utilizzare il metodo di invio multipart standard (anziché inviare il file in un iframe). Durante l'invio, invio richieste ajax che restituiscono la% completa del caricamento e quindi aggiornano il misuratore di avanzamento di conseguenza.Safari non consente richieste AJAX dopo l'invio del modulo?

Tutto questo funziona perfettamente in FireFox & IE. Tuttavia, Safari sembra impedire il completamento delle richieste Ajax dopo che il modulo principale è stato inviato. Nel debugger, posso vedere le intestazioni delle richieste, ma sembra che la risposta non sia mai stata ricevuta.

Chiunque ne sia a conoscenza o su come aggirarlo?

+2

Si prega di inviare un po 'di codice, forse c'è un modo per aggirare il problema – ichiban

risposta

0

Questo in realtà suona come un comportamento corretto per me - e sono sorpreso che Firefox e IE si comportino diversamente.

È come se si stesse tentando di lasciare una pagina e la pagina continuasse a interagire con voi - sembra impertinente!

posso capire perché questo sarebbe di beneficio - ma mi auguro che sia il caso se si sta eseguendo un POST per l'uri che si sta attualmente accedendo, o nel peggiore stesso dominio.

2

Stai utilizzando un iframe per inviare il modulo? Suppongo che una volta inviato il modulo, la pagina entri in uno stato in cui non è possibile apportare ulteriori modifiche al DOM.

Controllare un tutorial come this one per ulteriori informazioni.

3

Sì, questo è il modo in cui Safari e qualsiasi browser basato su WebKit (ad esempio Google Chrome) si comportano. Di recente mi sono imbattuto in questo anche su un indicatore di avanzamento del caricamento di file. Ho finito per usare la stessa tecnica vista allo http://drogomir.com/blog/2008/6/30/upload-progress-script-with-safari-support per far funzionare l'ajax. Nel mio caso, non volevo cambiare l'aspetto della mia applicazione a quello usato da Drogomir, ma la tecnica stessa funzionava. In sostanza, la soluzione è creare un iframe nascosto solo in Safari che carichi jQuery e lo script AJAX. Quindi, il frame superiore chiama una funzione in quel frame sul modulo submit. Tutti gli altri browser funzionano ancora come prima.

Problemi correlati