2013-07-16 76 views
2

我正在使用jQuery 1.9.1,並且有一個問題似乎只是間歇性地發生在移動Safari上。ajax在iPhone上調用Safari不會返回

  1. 在按鈕上單擊,調用FB.login,在移動Safari上彈出一個新頁面並要求用戶登錄到FB。之後,頁面關閉,控件返回到上一頁。
  2. 當FB.login返回時,獲取ID和訪問令牌,並調用我們的API /後端服務器的ajax調用嘗試登錄
  3. 登錄調用API返回,如果響應成功,重定向到主頁,如果響應是「用戶不存在」,呈現創建帳戶頁面

問題是調用API服務器。大多數情況下,無論如何,20-30%的時間都沒有問題。

失敗手段 - 沒有AJAX的完成/失敗/總是被稱爲 的 - 也嘗試成功/錯誤/完整的,不叫

我看到在服務器端的請求,服務器返回。這可能是超時問題,但服務器通常很快返回(小於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遠程](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會在Safari移動版上間歇性地觸發。可能是因爲之前提到的超時問題。我將請求類型切換爲'get',一切正常。