Альтернативы для синхронного Javascript XMLHttpRequest (как тайм-аут в Safari)

Укороченная версия: Ищите метод ожидания Asynch XHR-запроса или способ заставить Synch XHR работать в Safari.

Гораздо длиннее версия: Я работаю над веб-службой, которая использует различные внешние источники данных, соединенные вместе. Я использую интерфейс Javacript, который делает AJAX / XHR-вызовы для моего PHP-кода сервера. Нет межсайтовых проблем, поскольку клиент запрашивает данные только с моего сервера (сервер запрашивает внешние данные).

Я использую синхронный XHR-запрос, поскольку у меня есть некоторая обработка после загрузки (сортировка, фильтрация и т. Д.) Для обработки данных перед их отображением на экране.

Все это прекрасно работает в IE, FF и Opera, но, похоже, является проблемой для Safari (я еще не пробовал Chrome).

Используя Firebug для Safari на моем компьютере с Windows, я вижу, что сервер вызывает beng made, а затем происходит сбой по истечении 10 секунд. На моем iPad сообщение выглядит немного лучше: NETWORK_ERR: XMLHttpRequest Exception 101: в синхронном режиме произошла ошибка сети.

Небольшое исследование показывает, что Safari отключится через 10 секунд в режиме синхронизации. Похоже, есть функция тайм-аута, которую вы можете использовать для ее увеличения (с максимальным пределом для Safari 60 секунд). К сожалению, я не могу заставить это работать.

Теперь мне интересно, что бы люди посоветовали как лучший способ обойти это через изменения в клиентском коде Javacript.

Два варианта, о которых я думаю: (i) найти рабочий пример таймаута синхронизации XHR, который будут соблюдать браузеры Safari; или (ii) иметь какую-то оболочку вокруг асинхронного XHR-вызова, чтобы обработка после загрузки сначала ожидала загрузки.

Я не очень опытный хакер Javascript, но я настроил немало средств на этот проект. Я не использовал JQuery или любые другие фреймворки и предпочел бы придерживаться необработанного JS, чтобы избежать необходимости изучать дополнительный синтаксис. [Вы можете видеть из моих предыдущих постов, которые я пытался использовать JQM и Spry в прошлом, но оба оказались неправильными, по крайней мере на данном этапе, и с тех пор были исключены на данный момент].

Я чувствую, что обратный вызов может быть подходящим вариантом ожидания асича, но я не уверен, как это работает или как вы его закодируете.

На данном этапе это всего лишь прототип, поэтому грязные хаки приемлемы. Полное переписывание уже на картах на будущее, как только я доказал функциональность.

Цените мысли и советы людей по этому поводу.

С Уважением, Пит.

Ответы на вопрос(1)

Ваш ответ на вопрос