#javascript #iphone #ajax #xmlhttprequest #comet
#javascript #iPhone #ajax #xmlhttprequest #comet
Вопрос:
Я пытаюсь выполнить длительный опрос, используя XMLHttpRequest. он отлично работает во всех поддерживающих браузерах, но по какой-то причине в safari на iPhone я получаю индикатор загрузки при каждом вызове ajax, и при длительном опросе это немного раздражает.
Я читал, что вам нужно дождаться загрузки документа, но это не похоже на работу. любой другой известный способ решить эту проблему?
Комментарии:
1. 1 — Это раздражает, даже когда вы не проводите длительный опрос.
2. к сожалению, нет — у меня то же самое при просмотре страницы, на которой есть события, отправленные сервером.
3. Вы пытались использовать вместо этого веб-сокеты, например, что-то вроде socket.io ?
Ответ №1:
У меня была такая же проблема, я пытался использовать простой XHRO, скрытые iFrames и т.д., Это просто не работает на iPhone. Похоже, что он не обновляет DOM или ничего не делает, пока не будет загружен «весь» документ, который в моем примере был продолжительностью длительного опроса.
Единственное, что я не пробовал, это JSONP. Возможно, вы можете попробовать JSONP.
Пожалуйста, дайте нам знать, удалось ли вам попробовать JSONP и сработал ли он или работало ли что-нибудь вообще!
ОБНОВЛЕНИЕ: Я не знаю, почему это помечено как ответ, я так не думаю, поэтому, пожалуйста, дайте мне знать, как сделать это комментарием вместо ответа.
Комментарии:
1. Это ваш ответ на вопрос 🙂 но нет проблем, я попробую это как можно скорее и дам вам отзыв здесь, так что спасибо за ваш вклад 🙂
2. Я пробовал JSONP, но, похоже, у меня это не работает — у меня даже не получилось загрузить исходный код в :/
3. @Florian «У меня даже не получилось загрузить исходный код в», так что вы не смогли запустить JS, возвращенный сервером? Можете ли вы опубликовать какую-нибудь упрощенную версию своего кода? Я знаю, что длительный опрос — это большая проблема для выполнения работы, особенно в safari.. Мне бы очень хотелось знать, как работает Etherpad и / или Google chat.. Я подозреваю, что в настоящее время на iPhone они все еще используют периодические вызовы AJAX с коротким опросом.. Дай мне знать, братан..
Ответ №2:
У меня тоже была такая же проблема.
Заставить long-polling (или любой другой опрос на самом деле) работать во ВСЕХ браузерах — это пинок под зад. И особенно safari. Боже мой.
сокет.io — это решение.
Комментарии:
1. Я не могу это использовать, потому что мне разрешено разрабатывать только на стороне клиента, поэтому я могу создавать только JavaScript, PHP и HTML-структуры.
2. в этом случае вам, вероятно, следует рассмотреть возможность использования функции jQuery $.ajax () для выполнения задания вместо XMLHttpRequest. Я считаю, что у него лучшая совместимость с несколькими браузерами. Вы запускаете простой тест в safari с помощью $.ajax (), а затем создаете на его основе.