【问题标题】:Want to load spinner on modal window before ajax function call in jquery想要在 jquery 中调用 ajax 函数之前在模态窗口上加载微调器
【发布时间】:2016-08-25 15:16:30
【问题描述】:

我只想在单击发送电子邮件按钮时加载微调器,我正在使用 ajax 功能发送电子邮件。发送电子邮件后,我想隐藏微调器。这是我的代码:

我的微调器正在加载 div

<div id="loader" class="loader" style="display:none;"></div>

微调器类

<style>
.loader {
position: fixed;
left: 0px;
top: 0px;
width: 100%;
height: 100%;
z-index: 9999;
background: url('http://test:8000/images/page_loader.gif') 50% 50%   no-repeat rgb(249,249,249);    
}
</style>

我的 jquery:

$("#send_mail").click(function(){
    $(".loader").show();
    var subject = $("#subject").val(); 
    var token = "{!! csrf_token() !!}";
    var order_id = "{{ @$orders->id }}";
    var url = "{!! URL::to('/') !!}";
    $.ajax({
        type: 'POST',
        url: url +'/order/'+order_id+'/sendmail',
        data: {'_token':token, 'subject':subject },
        async : false,
        beforeSend: function() { 

        }, 
        success : function(data) {
            setTimeout(function()
            {
                $(".loader").fadeOut("slow");
            },9000);
            var result = JSON.parse(data);
            if(result)
            {
                $("#email_modal").modal('hide');
                if(result['status'] == 'success')
                {
                    $("#mail_success").show();
                    setTimeout(function()
                    {
                        $('#mail_success').hide();
                    },3000);
                }
                else
                {
                    $("#mail_error").show();
                    setTimeout(function()
                    {
                        $('#mail_error').hide();
                    },3000);
                }
            }
        },
        error: function(data){
            alert(data);
        }
    });
}); 

问题是,我的微调器在邮件发送后开始加载。谁能帮我解决这个问题,比如我在这里犯了什么错误???

感谢您的帮助!!!

提前致谢。

【问题讨论】:

  • 在这个链接上查看答案stackoverflow.com/questions/68485/…
  • 我也用过这个...但没有得到正确的响应..
  • 实际上我正在一个模式窗口中处理所有这些。现在告诉我我错过了什么。因为我为这个简单的过程尝试了很多方法,但没有得到正确的输出......

标签: jquery


【解决方案1】:

您需要在beforeSend 回调中显示加载器并在errorsuccess 回调中隐藏。

JS 代码:

 //hide the spinner by default in css 'display:none'
 $.ajax({
   data:...
   url:....
   beforeSend:function () {
        $('.loader').show();
   },
   success:function(){
        $('.loader').hide();
        .....
   },
   error:function(){
       $('.loader').hide();
       .....
   });

【讨论】:

  • 是的,我什至也试过这个……但什么也没发生。我不知道发生了什么。问题是,当我单击发送邮件按钮时,它应该显示微调器。但它没有发生。
  • 它应该可以工作,除非你在其他地方有问题,检查这个示例 jsfiddle,jsfiddle.net/Behseini/vx1j3gx9
  • 实际上我正在一个模式窗口中处理所有这些。现在告诉我我错过了什么。因为我为这个简单的过程尝试了很多方法,但没有得到正确的输出......
  • 您的代码存在一些问题,我已对此进行了评论。 1. 删除最初的.loader.show(),不再需要它。 2. 同时删除用于淡出加载器/微调器的超时功能,因为它不是必需的。我已经修复了你的代码,你可以看看jsfiddle.net/dreamweiver/durtshhz/13
猜你喜欢
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多