简体   繁体   English

在使用jQuery的AJAX请求期间显示忙碌加载指示器

[英]Showing Busy loading Indicator during an AJAX Request using jQuery

I have status active/Deactive Buttons when user clicks on active status it turns into deactive with red color and vice versa 当用户单击活动状态时,我具有状态活动/非活动按钮,状态变为红色,反之亦然

currently i'm able to update my status @backend but everytime i should refresh to see my changes!! 目前,我能够更新我的状态@backend,但是每次我应该刷新以查看更改时!!

my requirement is during active/deactive process of changing status i want to load ajax image loader where loader image should overlay entire screen. 我的要求是在更改状态的活动/不活动过程中,我想加载ajax图像加载器,其中加载器图像应覆盖整个屏幕。 and my status should be updated in mysql db!! 我的状态应该在mysql db中更新!

please any help is appricated Thanks! 请任何帮助,谢谢!

Php Code 邮递区号

<?php 
    include 'db.php';
    $sql = "select * from sections order by id asc";
    $data = $con->query($sql);
    $str='';
    if($data->num_rows>0)
    {
        while( $row = $data->fetch_array(MYSQLI_ASSOC))
        {
            $str.="
        "?>
        <div class="row">
            <div class="col-md-1">
            <?php 
                if ($row['status'] == '1') 
                { 
            ?>
        <a href="#" class="btn btn-success btn-sm active" ida='<?php echo $row['id'];?>'></a>
        <?php } 
        else if($row['status'] == '0')
        {
        ?>
        <a href="#" class="btn btn-danger btn-sm deactive" idde='<?php echo $row['id'];?>'></a>
        <?php } ?>
        </div>
        </div>
    <?php
        }
    }
    else
    {
        $str .= "<p style='text-align:left;'>No Data Available</p>";
    }
    echo $str;   
?>

Jquery Code jQuery代码

<script type="text/javascript">
$('body').delegate('.active','click',function(e){

    var IdStatus = 0;
    var id = $(this).attr('ida');
    $.ajax({
        url:"pages/status1.php",
        data:{
            status:IdStatus,
            id:id
        },
        dataType:'html',
        success:function()
        {
            alert('success');
        }
    });
    e.preventDefault();
    return false;
});

$('body').delegate('.deactive','click',function(e){
    var IdStatus = 1;
    var id = $(this).attr('idde');
    $.ajax({
        url:"pages/status1.php",
        data:{
            status:IdStatus,
            id:id
        },
        dataType:'html',
        success:function()
        {
            alert('success');
        }
    });
    e.preventDefault();
    return false;
});
</script>

PHP Updation Code PHP更新代码

<?php 
    if(isset($_REQUEST['status']))
    {
    $status = $_REQUEST['status'];
    $id = $_REQUEST['id'];
    $sql = 'update sections set status='.$status.' where id='.$id.'';
    $result = mysql_query($sql);
    if($result)
    {
        echo 'updated successfully';
    }
    else
    {
        echo 'failed to update';
    }
}
?>

Try this script with mentioned changes: 尝试使用上述更改的脚本:

Changes: 变化:

  1. Keep same attribute as data-id for both the operations 两项操作都与data-id保持相同的属性
  2. loaderElem will be the loader container which should be there in your DOM loaderElem将是应该位于您的DOM中的加载器容器
  3. BODY is nothing but a body selector , just to avoid redundant selectors BODY只是body selector ,只是为了避免多余的选择器
  4. var elem = $(this); is used as I need this reference after success callback 用于成功回调后我需要this参考
  5. Also make habit of using error callback as you might need to handle that case 还要养成使用错误回调的习惯,因为您可能需要处理这种情况
var BODY = $('body');
var loaderElem = $('#loader');
BODY.delegate('.active', 'click', function(e) {
  loaderElem.show();
  var IdStatus = 0;
  var elem = $(this);
  var id = elem.attr('data-id');
  $.ajax({
    url: "pages/status1.php",
    data: {
      status: IdStatus,
      id: id
    },
    dataType: 'html',
    success: function() {
      elem.removeClass('active').addClass('deactive');
      loaderElem.hide();
      alert('success');
    }
  });
  e.preventDefault();
  return false;
});
BODY.delegate('.deactive', 'click', function(e) {
  loaderElem.show();
  var IdStatus = 1;
  var elem = $(this);
  var id = elem.attr('data-id');
  $.ajax({
    url: "pages/status1.php",
    data: {
      status: IdStatus,
      id: id
    },
    dataType: 'html',
    success: function() {
      elem.removeClass('deactive').addClass('active');
      loaderElem.hide();
      alert('success');
    }
  });
  e.preventDefault();
  return false;
});

Try using beforeSend option of $.ajax() 尝试使用$.ajax() beforeSend选项

$('body').delegate('.active','click',function(e){

    var IdStatus = 0;
    var id = $(this).attr('ida');
    $.ajax({
        url:"pages/status1.php",
        beforeSend: function() {
          // do overlay stuff
        },
        data:{
            status:IdStatus,
            id:id
        },
        dataType:'html',
        success:function()
        {
            // remove overlay stuff
            alert('success');
        }
    });
    e.preventDefault();
    return false;
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM