jquery - 如何显示 jQuery 正在工作/等待/加载?

标签 jquery jquery-load jquery-post

如何向用户显示加载图片和/或消息? 如果可能的话,我想知道如何使其全屏显示并带有灰色调暗的背景。有点像从一些画廊查看大图片时(抱歉,没有示例链接)。

目前我添加了一个包含图像和其他格式的 CSS 类,但由于某种原因它不起作用。 搜索结果确实会插入到 div 中。

HTML

<div id="searchresults"></div>

CSS

div.loading {
  background-image: url('../img/loading.gif'); 
  background-position: center;
  width: 80px;
  height: 80px;
}

JS

$(document).ready(function(){
  $('#searchform').submit(function(){
    $('#searchresults').addClass('loading');
    $.post('search.php', $('#'+this.id).serialize(),function(result){
      $('#searchresults').html(result);
    });
    $('#searchresults').removeClass('loading');
    return false;
  });
});

最佳答案

你的问题是你在发出ajax调用后立即调用removeClass('loading'),而不是在它完成后。

您可以在ajax回调中执行removeClass('loading')$.post 允许仅提供 success 回调:

jQuery.post( url, [ data ], [ success(data, textStatus, XMLHttpRequest) ], [ dataType ] )

无论成功还是失败,加载图片都应该被删除,所以最好使用 $.ajax()complete 回调:

$('#searchform').submit(function(){
  $('#searchresults').addClass('loading');

  $.ajax({
    type: 'POST',
    url: 'search.php',
    data:  $('#'+this.id).serialize(),
    success: function(result){
      $('#searchresults').html(result);
    },
    complete: function() {
      $('#searchresults').removeClass('loading');
    }
  });
  return false;
});

有关回调的更多信息,请参阅 $.ajax() docs 中的“回调函数”部分。

关于jquery - 如何显示 jQuery 正在工作/等待/加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2919462/

相关文章:

jQuery .load() 但排除脚本标签

javascript - Jquery post > 成功不触发

javascript - 这看起来很简单,但我无法在 jquery API 中找到所需的函数

javascript - 如何获取所有 optgroup 选项值并将它们推送到数组?

javascript - Chrome 中的页面重新加载会在重新加载页面之前不必要地触发绑定(bind)事件

jquery - 使用jQuery的.load()加载页面片段但只获取选择器的内容

javascript - 卸下右侧和底部/右侧 handle

php - .load() 不为未缓存的图像触发 - jquery

jquery - django csrf 在生产服务器上失败

jQuery 将数据发布到错误的相对 URL