2013-10-16 60 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(...);没有工作。