Альтернативы для синхронного 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 в прошлом, но оба оказались неправильными, по крайней мере на данном этапе, и с тех пор были исключены на данный момент].
Я чувствую, что обратный вызов может быть подходящим вариантом ожидания асича, но я не уверен, как это работает или как вы его закодируете.
На данном этапе это всего лишь прототип, поэтому грязные хаки приемлемы. Полное переписывание уже на картах на будущее, как только я доказал функциональность.
Цените мысли и советы людей по этому поводу.
С Уважением, Пит.