onLoading: showLoad, onComp"/>

如何显示jQuery中的加载微调器?

如何显示jQuery中的加载微调器?

How to show loading spinner in jQuery?

在原型中,我可以使用以下代码显示"正在加载..."图像:

1
2
3
4
5
6
var myAjax = new Ajax.Request( url, {method: 'get', parameters: pars,
onLoading: showLoad, onComplete: showResponse} );

function showLoad () {
    ...
}

在jQuery中,我可以使用以下命令将服务器页面加载到元素中:

1
$('#message').load('index.php?pg=ajaxFlashcard');

但是如何像在Prototype中一样将加载微调器附加到此命令?


有两种方法。我的首选方法是将一个函数附加到元素本身上的ajaxStart / Stop事件。

1
2
3
4
5
6
7
8
9
$('#loadingDiv')
    .hide()  // Hide it initially
    .ajaxStart(function() {
        $(this).show();
    })
    .ajaxStop(function() {
        $(this).hide();
    })
;

每当您执行任何Ajax调用时,ajaxStart / Stop函数都会触发。

更新:从jQuery 1.8开始,文档指出.ajaxStart/Stop仅应附加到document。这会将上面的代码段转换为:

1
2
3
4
5
6
7
8
var $loading = $('#loadingDiv').hide();
$(document)
  .ajaxStart(function () {
    $loading.show();
  })
  .ajaxStop(function () {
    $loading.hide();
  });

对于jQuery,我使用

1
2
3
4
5
6
7
8
9
jQuery.ajaxSetup({
  beforeSend: function() {
     $('#loader').show();
  },
  complete: function(){
     $('#loader').hide();
  },
  success: function() {}
});


您可以只使用jQuery的.ajax函数并使用其选项beforeSend并定义一些函数,在其中可以显示类似loader div的内容,而在成功选项中可以隐藏该loader div。

1
2
3
4
5
6
7
8
9
10
11
jQuery.ajax({
    type:"POST",
    url: 'YOU_URL_TO_WHICH_DATA_SEND',
    data:'YOUR_DATA_TO_SEND',
    beforeSend: function() {
        $("#loaderDiv").show();
    },
    success: function(data) {
        $("#loaderDiv").hide();
    }
});

您可以具有任何Spinning Gif图像。这是一个根据您的配色方案是出色的AJAX Loader Generator的网站:http://ajaxload.info/


您可以在AJAX调用之前将动画图像插入DOM中,并执行内联函数将其删除...

1
2
3
4
$("#myDiv").html('<img src="images/spinner.webp" alt="Wait" />');
$('#message').load('index.php?pg=ajaxFlashcard', null, function() {
  $("#myDiv").html('');
});

这将确保您的动画在后续请求中从同一帧开始(如果重要)。请注意,旧版本的IE可能在动画方面存在困难。

祝好运!


1
2
3
4
5
6
7
$('#message').load('index.php?pg=ajaxFlashcard', null, showResponse);
showLoad();

function showResponse() {
    hideLoad();
    ...
}

http://docs.jquery.com/Ajax/load#urldatacallback


如果您使用的是$.ajax(),则可以使用以下内容:

1
2
3
4
5
6
7
8
9
10
$.ajax({
        url:"destination url",
        success: sdialog,
        error: edialog,
        // shows the loader element before sending.
        beforeSend: function () { $("#imgSpinner1").show(); },
        // hides the loader after completion of request, whether successfull or failor.            
        complete: function () { $("#imgSpinner1").hide(); },            
        type: 'POST', dataType: 'json'
    });

使用加载插件:http://plugins.jquery.com/project/loading

1
$.loading.onAjax({img:'loading.webp'});

变体:我在主页的左上方有一个带有id =" logo"的图标;然后,当ajax工作时,微调gif会覆盖在顶部(透明)。

1
2
3
4
5
6
7
8
9
jQuery.ajaxSetup({
  beforeSend: function() {
     $('#logo').css('background', 'url(images/ajax-loader.webp) no-repeat')
  },
  complete: function(){
     $('#logo').css('background', 'none')
  },
  success: function() {}
});

最后,我对原始回复进行了两项更改。

  • 从jQuery 1.8开始,ajaxStart和ajaxStop应该仅附加到<??x1>。这使得仅过滤一些ajax请求变得更加困难。 o
  • 切换到ajaxSend和ajaxComplete可以在显示微调器之前检查当前的ajax请求。
  • 这些更改之后的代码是:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $(document)
        .hide()  // hide it initially
        .ajaxSend(function(event, jqxhr, settings) {
            if (settings.url !=="ajax/request.php") return;
            $(".spinner").show();
        })
        .ajaxComplete(function(event, jqxhr, settings) {
            if (settings.url !=="ajax/request.php") return;
            $(".spinner").hide();
        })

    我也想为这个答案做贡献。我一直在寻找与jQuery类似的东西,而最终我使用了这个东西。

    我从http://ajaxload.info/获得了加载微调器。我的解决方案基于以下简单答案:http://christierney.com/2011/03/23/global-ajax-loading-spinners/。

    基本上,您的HTML标记和CSS如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    <style>
         #ajaxSpinnerImage {
              display: none;
         }
    </style>


         <img src="~/Content/ajax-loader.webp" id="ajaxSpinnerImage" title="working..." />

    然后,您的jQuery代码将如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
         $(document).ready(function () {
              $(document)
              .ajaxStart(function () {
                   $("#ajaxSpinnerImage").show();
              })
              .ajaxStop(function () {
                   $("#ajaxSpinnerImage").hide();
              });

              var owmAPI ="http://api.openweathermap.org/data/2.5/weather?q=London,uk&APPID=YourAppID";
              $.getJSON(owmAPI)
              .done(function (data) {
                   alert(data.coord.lon);
              })
              .fail(function () {
                   alert('error');
              });
         });

    它是如此简单 :)


    您可以简单地将加载程序映像分配给同一标签,稍后使用Ajax调用在该标签上加载内容:

    1
    2
    3
    $("#message").html('<span>Loading...</span>');

    $('#message').load('index.php?pg=ajaxFlashcard');

    您也可以将span标签替换为image标签。


    除了为ajax事件设置全局默认值之外,还可以为特定元素设置行为。也许仅仅改变他们的班级就足够了吗?

    1
    2
    3
    4
    5
    6
    $('#myForm').ajaxSend( function() {
        $(this).addClass('loading');
    });
    $('#myForm').ajaxComplete( function(){
        $(this).removeClass('loading');
    });

    CSS示例,使用微调器隐藏#myForm:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    .loading {
        display: block;
        background: url(spinner.webp) no-repeat center middle;
        width: 124px;
        height: 124px;
        margin: 0 auto;
    }
    /* Hide all the children of the 'loading' element */
    .loading * {
        display: none;  
    }

    请注意,必须使用异步调用来使微调器起作用(至少这是导致我的问题直到ajax调用之后才显示,然后随着调用结束并移除微调器而迅速消失的原因)。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $.ajax({
            url: requestUrl,
            data: data,
            dataType: 'JSON',
            processData: false,
            type: requestMethod,
            async: true,                         <<<<<<------ set async to true
            accepts: 'application/json',
            contentType: 'application/json',
            success: function (restResponse) {
                // something here
            },
            error: function (restResponse) {
                // something here                
            }
        });

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $('#loading-image').html('<img src="/images/ajax-loader.webp"> Sending...');

            $.ajax({
                url:  uri,
                cache: false,
                success: function(){
                    $('#loading-image').html('');          
                },

               error:   function(jqXHR, textStatus, errorThrown) {
                var text = "Error has occured when submitting the job:"+jqXHR.status+" Contact IT dept";
               $('#loading-image').html('<span style="color:red">'+text +'  </span>');

                }
            });

    我在jQuery UI对话框中使用了以下内容。 (也许它可以与其他ajax回调一起使用?)

    1
    2
    3
    4
    5
    $('<img src="/i/loading.webp" id="loading" />').load('/ajax.html').dialog({
        height: 300,
        width: 600,
        title: 'Wait for it...'
    });

    包含一个动画加载gif,直到ajax调用完成后其内容被替换。


    这对我来说是最好的方法:

    jQuery的:

    1
    2
    3
    4
    5
    6
    7
    $(document).ajaxStart(function() {
      $(".loading").show();
    });

    $(document).ajaxStop(function() {
      $(".loading").hide();
    });

    咖啡:

    1
    2
    3
    4
    5
      $(document).ajaxStart ->
        $(".loading").show()

      $(document).ajaxStop ->
        $(".loading").hide()

    文件:ajaxStart,ajaxStop


    的JavaScript

    1
    2
    3
    4
    5
    6
    7
    $.listen('click', '#captcha', function() {
        $('#captcha-block').html('');
        $.get("/captcha/new", null, function(data) {
            $('#captcha-block').html(data);
        });
        return false;
    });

    的CSS

    1
    #loading { background: url(/image/loading.webp) no-repeat center; }

    这是一个非常简单而聪明的插件,用于特定目的:
    https://github.com/hekigan/is-loading


    我的ajax代码看起来像这样,实际上,我刚刚注释掉了async:错误的行,并且显示了spinner。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $.ajax({
            url:"@Url.Action("MyJsonAction","Home")",
            type:"POST",
            dataType:"json",
            data: {parameter:variable},
            //async: false,

            error: function () {
            },

            success: function (data) {
              if (Object.keys(data).length > 0) {
              //use data
              }
              $('#ajaxspinner').hide();
            }
          });

    我在ajax代码之前的函数中显示微调器:

    1
    2
    $("#MyDropDownID").change(function () {
            $('#ajaxspinner').show();

    对于HTML,我使用了很棒的字体类:

    推荐阅读

      linux满屏显示命令?

      linux满屏显示命令?,工具,系统,服务,电脑,网络,技术,信息,数据,上会,软件,如

      显示linux时间命令?

      显示linux时间命令?,时间,系统,信息,一致,命令,文件,终端,目录,选项,参数,lin

      linux加载库的命令?

      linux加载库的命令?,系统,地址,信息,设备,标准,服务,命令,名字,工具,首页,lin

      linux显示最多的命令?

      linux显示最多的命令?,系统,情况,信息,数据,工具,电脑,状态,时间,分析,命令,

      linux加载驱动命令6?

      linux加载驱动命令6?,信息,名称,设备,系统,电脑,软件,材料,下来,命令,权限,li

      linux加载过滤命令?

      linux加载过滤命令?,数据,系统,工具,标准,官网,灵活,最新,命令,文件,文件名,l

      linux显示错误命令?

      linux显示错误命令?,信息,系统,电脑,状态,时间,环境,命令,搜狐,密码,异常,虚

      linux逐行显示命令?

      linux逐行显示命令?,标准,信息,系统,工作,地址,命令,实时,名称,文件,目录,Lin

      linux显示时间命令?

      linux显示时间命令?,时间,系统,管理,标准,信息,单位,工具,数据,中国,命令,lin

      linux启动显示命令行?

      linux启动显示命令行?,系统,密码,终端,状态,首页,情况,基础,电脑,信息,工具,l

      linux启动显示命令行?

      linux启动显示命令行?,系统,密码,终端,状态,首页,情况,基础,电脑,信息,工具,l

      linux显示之前的命令?

      linux显示之前的命令?,系统,信息,命令,地址,服务,环境,数据,标准,数字,不了,l

      linux打开显示器命令?

      linux打开显示器命令?,信息,工具,系统,环境,发行,实时,数据,设备,命令,文件,L

      linux命令实时显示?

      linux命令实时显示?,系统,实时,时间,信息,情况,命令,对比,电脑,名称,一致,lin

      linux外部命令显示?

      linux外部命令显示?,系统,工具,命令,一致,盘中,软件,技术,外部,内部,文件夹,L

      linux命令显示ip?

      linux命令显示ip?,地址,系统,网络,信息,技术,电脑,手机,设备,服务,管理,配置L

      linux编译时显示命令?

      linux编译时显示命令?,系统,基础,工具,代码,百度,下来,网上,命令,内核,文件,L

      linux显示运行命令?

      linux显示运行命令?,系统,服务,状态,信息,工具,数据,电脑,标准,管理,时间,如

      显示linux网卡命令行?

      显示linux网卡命令行?,系统,信息,工具,网络,服务,电脑,网卡,技术指标,地址,

      linux设备加载命令?

      linux设备加载命令?,系统,设备,信息,电脑,第一,命令,文件,分区,磁盘,详细信