2009-06-04 12 views
9

Estoy escribiendo un medidor de progreso de carga basado en Javascript. Deseo utilizar el método estándar de envío de múltiples partes (en lugar de enviar el archivo en un iframe). Durante el envío, envío solicitudes ajax que devuelven el% completado de la carga y luego actualiza el medidor de progreso en consecuencia.Safari no permite solicitudes AJAX después de enviar formularios?

Todo esto funciona sin problemas en FireFox & IE. Sin embargo, Safari parece evitar la finalización de las solicitudes ajax después de que se haya enviado el formulario principal. En el depurador, puedo ver los encabezados de solicitud, pero parece que la respuesta nunca se recibe.

¿Alguien es consciente de esto o de cómo evitarlo?

+2

Por favor publique un código, tal vez hay una manera de solucionar el problema – ichiban

Respuesta

0

Esto realmente me parece correcto, y me sorprende que Firefox y IE se comporten de otra manera.

Es similar a usted intentar dejar una página y la página sigue interactuando con usted - ¡suena travieso!

entiendo por qué esto sería beneficioso, pero espero que sea el único caso si está realizando una POST a la uri a la que está accediendo actualmente, o en el peor de los casos, del mismo dominio.

2

¿Está utilizando un iframe para enviar su formulario? Supongo que una vez que se envía el formulario, la página entra en un estado donde no se pueden hacer más modificaciones al DOM.

Consulte un tutorial como this one para obtener más información.

3

Sí, así es como se comportan Safari y cualquier navegador basado en WebKit (es decir, Google Chrome). Recientemente me encontré con esto en un medidor de progreso de carga de archivos también. Terminé usando la misma técnica que se ve en http://drogomir.com/blog/2008/6/30/upload-progress-script-with-safari-support para hacer funcionar el ajax. En mi caso, no quería cambiar el aspecto de mi aplicación a la que usa Drogomir, pero la técnica en sí misma funcionaba. Básicamente, la solución es crear un iframe oculto solo en Safari que cargue jQuery y su script AJAX. Entonces, el marco superior llama a una función en ese marco en el envío de formulario. Todos los demás navegadores siguen funcionando igual que antes.

Cuestiones relacionadas