我正在使用 jQuery 1.9.1,并且有一个似乎只在移动 Safari 上间歇性发生的问题。
- 单击按钮,调用 FB.login,在移动 Safari 上它会弹出一个新页面并要求用户登录 FB。之后该页面关闭并且控制返回到上一页面。
- 当 FB.login 返回时,获取 id 和访问令牌,并对我们的 API / 后端服务器进行 ajax 调用尝试登录
- 登录调用API返回,如果响应成功,则重定向到主页,如果响应是“用户不存在”,则呈现创建帐户页面
问题是对 API 服务器的调用。大多数时候它都很好,但是有 20-30% 的时候它会失败。
失败意味着 - 没有一个 ajax 的 done/fail/always 被调用 - 也尝试了成功/错误/完成,没有调用
我在服务器端看到请求,然后服务器返回。这可能是超时问题,但服务器通常会很快返回(低于 100 毫秒)。
同样,这只发生在移动 Safari 上。与最新的 6.1.4 相比,在较旧的 iOS(5、6.0、6.1.2)上似乎更有可能。
我还尝试了 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");
});