Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在卸载之前显示加载程序和post AJAX_Javascript_Jquery_Ajax_Onbeforeunload - Fatal编程技术网

Javascript 在卸载之前显示加载程序和post AJAX

Javascript 在卸载之前显示加载程序和post AJAX,javascript,jquery,ajax,onbeforeunload,Javascript,Jquery,Ajax,Onbeforeunload,我有一个带有表单的设置页面。我注意到人们经常忘记单击save按钮,所以我决定在window.onbeforeunload上使用$.ajax发送POST请求。我还希望在发送请求之前显示来自的加载程序,并在请求完成时隐藏 这就是我所拥有的: function save(e) { var msg = 'Your settings were not saved. Please do not leave yet so we can try saving again'; $('form').dimm

我有一个带有表单的设置页面。我注意到人们经常忘记单击save按钮,所以我决定在window.onbeforeunload上使用$.ajax发送POST请求。我还希望在发送请求之前显示来自的加载程序,并在请求完成时隐藏

这就是我所拥有的:

function save(e) {
  var msg = 'Your settings were not saved. Please do not leave yet so we can try saving again';
  $('form').dimmer('show');

  var xhr = $.ajax('settings.php', {type: "POST", 
    data: $('form').serialize(), async: false});

  $('form').dimmer('hide');

  if (xhr.status !== 200){
    $('form').submit(); //will trigger if the user stays
    if (e)
      return e.returnValue = msg;
  }
}

if ('onbeforeunload' in window)
  window.onbeforeunload = save;
else if ('onunload' in window)
  window.onunload = save;
else {
  var button = $('noscript.submitParent').text();
  $('.ui.form.segment').append(button);
}
但是现在,加载程序在请求完成之前不会显示。我怀疑发生这种情况是因为async:false,这是不卸载页面所必需的

在发送请求之前,有没有关于如何显示加载程序的建议?可能吗? 我尝试了$window.trigger'resize'from和$form.dimmer.height的想法,但没有成功

我知道,但如果可能的话,我不想使用它


我使用jQuery 2.1.1

对不起,为什么不自动保存它?像谷歌DocsHow里经常出现的那样?无输入?我不想经常这样