Alternativas para Javascript Synchronous XMLHttpRequest (como tiempo de espera en Safari)

Versión corta: en busca de un método para esperar una solicitud Asynch XHR o una manera de hacer que Synch XHR funcione en Safari.

Versión mucho más larga: estoy trabajando en un servicio web que utiliza varios orígenes de datos externos combinados. Estoy usando un front-end Javacript que hace llamadas AJAX / XHR a mi código de servidor PHP. No hay problemas entre sitios, ya que el cliente solo solicita datos de mi servidor (el servidor realiza las solicitudes de datos externos).

Estoy utilizando una solicitud XHR síncrona, ya que tengo que realizar un procesamiento posterior a la carga (clasificación, filtrado, etc.) en los datos antes de que se muestren en la pantalla.

Todo esto funciona bien en IE, FF y Opera, pero parece ser un problema para Safari (aún no he probado Chrome).

Al usar Firebug for Safari en mi máquina con Windows, puedo ver el servidor que llama a beng made y luego falla después de un tiempo superior a 10 segundos. En mi iPad, el mensaje es un poco mejor, ya que dice: NETWORK_ERR: XMLHttpRequest Excepción 101: Se produjo un error de red en modo síncrono.

Un poco de investigación indica que Safari se agotará después de 10 segundos en el modo de sincronización. Parece que hay una función de tiempo de espera cuya función de tiempo de espera se puede usar para extender esto (con un límite máximo para Safari de 60 segundos). Desafortunadamente no puedo hacer que esto funcione.

Ahora me pregunto qué sugeriría la gente como la mejor manera de solucionar esto a través de cambios en el código Javacript del cliente.

Las dos opciones que estoy pensando son (i) encontrar un ejemplo funcional de un tiempo de espera XHR de sincronización que los navegadores de Safari respetarán; o (ii) tener algún tipo de envoltorio alrededor de una llamada XHR asíncrona para que el procesamiento posterior a la carga espere primero la carga.

No soy un hacker Javascript con experiencia, pero he configurado una buena cantidad en este proyecto. No he usado JQuery ni ningún otro marco y preferiría seguir con JS en bruto para evitar tener que aprender la sintaxis adicional. [Puede ver en mis publicaciones anteriores que intenté usar JQM y Spry en el pasado, pero ambas demostraron ser las opciones equivocadas, al menos en esta etapa y desde entonces han sido abandonadas por ahora].

Me da la sensación de que una devolución de llamada puede ser la opción correcta de esperar por Asych, pero no estoy seguro de cómo funciona esto o cómo lo codificaría.

Esto es solo un prototipo en esta etapa, por lo que los hacks sucios son aceptables. Una reescritura completa ya está en las tarjetas para más adelante una vez que haya probado la funcionalidad.

Aprecie los pensamientos y consejos de la gente sobre esto.

Saludos, Pete.

Respuestas a la pregunta(1)

Su respuesta a la pregunta