2013-07-16 3 views
2

Я использую jQuery 1.9.1 и имею проблему, которая, кажется, происходит только на мобильном Safari с перерывами.вызов ajax на iPhone Safari не возвращается

  1. Нажав кнопку, позвоните по телефону FB.login, на мобильном Safari появится новая страница и попросите пользователя войти в FB. После этого эта страница закрывается, и управление возвращается на предыдущую страницу.
  2. , когда FB.login возвращает, получает идентификатор доступа и токена доступа и делает вызов ajax нашему серверу API/backend, попробуйте войти в систему
  3. login call to API возвращает, если ответ успешный, перенаправляет на домашнюю страницу, если ответ «пользователь не существует», сделать страницу создания учетной записи

Проблема заключается в вызове API-сервера. В большинстве случаев это нормально, однако в 20-30% случаев это терпит неудачу.

Сбой средства - ни один из проделанных/не годен/всегда называются АЯКС - также пытались успеха/ошибки/полная, не называется

Я вижу запрос на стороне сервера, а сервер возвращает. Это может быть проблема с таймаутом, но сервер обычно возвращается очень быстро (до 100 мс).

И снова это происходит только на мобильном Safari. И, скорее всего, это относится к более старым iOS (5, 6.0, 6.1.2) и к последней версии 6.1.4.

Я также пробовал jQuery 1.10.2 и 2.0.3 и столкнулся с той же проблемой.

У кого-нибудь были подобные проблемы?

Пример кода

$.ajax({ 
     type: 'POST', 
     cache: false, 
     url: gem.conf.apiUrls.user_login_facebook, 
     data: JSON.stringify(data), 
     dataType: 'json', 
     contentType: 'application/json', 
     beforeSend: gem.auth.set_request_headers 
    }).done(function(data, textStatus, jqXHR) { 
     gem.utils.log.debug("gem.auth.login_facebook_impl: ajax done"); 
    }).fail(function(data, textStatus, jqXHR) { 
     gem.utils.log.debug("gem.auth.login_facebook_impl: ajax fail"); 
    }).always(function(data, textStatus, jqXHR) { 
     gem.utils.log.debug("gem.auth.login_facebook_impl: ajax always"); 
    }); 
+0

Вы отлаживали? вы можете легко отлаживать использование [JSBin remote] (http://www.elijahmanor.com/2011/03/jsconsole-remote-debugging-and-jsbin.html) или любой удаленный инструмент javascript, вокруг есть десятки. – balexandre

+0

Когда я отлаживаю, он отлично работает – Jonathan

ответ

0

Это, как представляется, проблема тайм-аут после того, как я указал явный тайм-аут (2,5 секунды), все работало хорошо. Я также очистил окружающий код, но я не думаю, что они связаны с этим ajax, который не возвращается.

0

Попробуйте переключить тип запроса с 'post' на 'get', если сможете. Это исправило это для меня. Я делал кучу почтовых запросов в $ .when, и .done периодически прерывался на сафари-мобиле. Вероятно, из-за проблемы с таймаутом, упомянутой ранее. Я переключил типы запросов на «get», и все работало нормально.

Смежные вопросы