2013-10-16 57 views
1

在某些特定頁面上,我需要在頁面卸載時在SQL中運行更新語句。在用戶到達下一頁之前,它需要完成。我正在使用JQuery 1.8.3。這裏是我開始的地方:JQuery onunload()AJAX無異步:false

$(window).unload(function() { 
    $.ajax({ 
      type: "POST", 
      cache: false, 
      url: "myScript.php", 
      data: ({ /* my data */ }), 
      success: function(result) { /* do nothing */ }, 
      error: function(data) { location.reload(); } 
    }); 
}); 

使用此方法更新語句沒有運行。通過閱讀它,我嘗試了「異步:錯誤」,它似乎並沒有解決我的問題,直到我檢查了我的表並看到值正在更新(僅在添加「async:false」之後)。根據進一步的閱讀,「異步:錯誤」在JQuery 1.8中已被棄用,但仍在努力執行更新語句。問題是update語句在下一頁的select語句已經完成之前沒有完成執行,所以數據已經過期,除非用戶刷新頁面。這是由於部分支持1.8中的「async:false」,寫入數據庫的執行速度較慢,數據庫的讀取速度較快,還有一些其他延遲問題,或者?即使卸載事件將用戶保留在頁面上,下一個HTTP請求是否可能會經過?

回答

4

解決:

$(window).on('beforeunload', function() { 
    $.ajax({ 
      type: "POST", 
      async: false, 
      cache: false, 
      url: "myScript.php", 
      data: ({ /* my data */ }), 
      success: function(result) { /* do nothing */ }, 
      error: function(data) { location.reload(); } 
    }); 
}); 

$(窗口).onbeforeunload(...);沒有工作。