Alternativas para Javascript Synchronous XMLHttpRequest (como o tempo limite no Safari)

Versão curta: Procurando por um método para esperar por um pedido do Asynch XHR ou uma maneira de fazer o Synch XHR funcionar no Safari.

Versão muito mais longa: Estou trabalhando em um serviço da Web que usa várias fontes de dados externas unidas. Eu estou usando um front-end Javacript que faz chamadas AJAX / XHR para o meu código do servidor PHP. Não há problemas entre sites, pois o cliente só solicita dados do meu servidor (o servidor faz as solicitações de dados externos).

Eu estou usando uma solicitação XHR síncrona como eu tenho algum processamento pós-carga (classificação, filtragem, etc) para fazer nos dados antes de ser apresentado na tela.

Isso tudo funciona bem no IE, FF e Opera, mas parece ser um problema para o Safari (ainda não experimentei o Chrome).

Usando o Firebug for Safari em minha máquina Windows, consigo ver o servidor chamando beng e depois ele falha após um tempo acima de 10 segundos. No meu iPad, a mensagem é um pouco melhor, pois diz: NETWORK_ERR: XMLHttpRequest Exceção 101: Ocorreu um erro de rede no modo síncrono.

Um pouco de pesquisa indica que o Safari irá expirar após 10 segundos no modo de sincronização. Parece haver uma função de tempo limite que a função de tempo limite pode ser usada para estender isso (com um limite máximo para o Safari de 60 segundos). Infelizmente não consigo fazer isso funcionar.

Agora estou me perguntando o que as pessoas sugeririam como a melhor maneira de contornar isso através de alterações no código Javacript do cliente.

As duas opções que estou pensando são (i) encontrar um exemplo funcional de um tempo limite de XHR de sincronização que os navegadores do Safari irão honrar; ou (ii) ter algum tipo de wrapper em torno de uma chamada XHR assíncrona para que o processamento de pós-carga espere pela carga primeiro.

Eu não sou um hacker experiente em Javascript, mas eu configurei uma quantidade justa neste projeto. Eu não usei o JQuery ou qualquer outro framework e preferiria manter o JS bruto apenas para evitar ter que aprender a sintaxe adicional. [Você pode ver em meus posts anteriores que eu tentei usar JQM e Spry no passado, mas ambos provaram ser as escolhas erradas, pelo menos nesta fase e desde então foram abandonadas por agora].

Tenho a sensação de que um callback pode ser a opção certa de wait-for-asych, mas não tenho certeza de como isso funciona ou como você o codificaria.

Este é apenas um protótipo neste estágio, então hacks sujos são aceitáveis. Uma reescrita completa já está nos cartões para mais tarde, uma vez que eu tenha funcionalidade comprovada.

Aprecie os pensamentos e conselhos das pessoas sobre isso.

Atenciosamente, Pete.

questionAnswers(1)

yourAnswerToTheQuestion