2

我正在使用 jQuery 1.9.1,并且有一个似乎只在移动 Safari 上间歇性发生的问题。

  1. 单击按钮,调用 FB.login,在移动 Safari 上它会弹出一个新页面并要求用户登录 FB。之后该页面关闭并且控制返回到上一页面。
  2. 当 FB.login 返回时,获取 id 和访问令牌,并对我们的 API / 后端服务器进行 ajax 调用尝试登录
  3. 登录调用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");
    });
4

2 回答 2

0

如果可以,请尝试将请求类型从“发布”切换为“获取”。那为我修好了。我在 $.when 中发出了一堆帖子请求,而 .done 会在 safari mobile 上间歇性地触发。可能是因为前面提到的超时问题。我将请求类型切换为“获取”,一切正常。

于 2015-02-17T04:32:42.130 回答
0

这似乎是一个超时问题,一旦我指定了一个明确的超时时间(2.5 秒),一切都很好。我还清理了周围的代码,但我不认为它们与这个 ajax 没有返回有关。

于 2013-07-17T03:27:02.507 回答