如何使用ajax添加简单的jquery加载器/旋转器?

问题描述 投票:0回答:6

我只需要一些关于在我的表单中添加简单的加载器/旋转器的帮助。 我的 jquery 中有一个搜索表单。我想在搜索过程中包含加载器/旋转器图像。该过程完成后,加载程序将不再可见。

这是我的代码,顺便说一下我正在使用 CodeIgniter。

这是单击搜索按钮时我的代码:

//search
        $('#search-btn').on('click',function(){

            var query = $("#keyword").val();

            var image = "<?php echo base_url()."/resources/loading/loading43.gif"; ?>";

            $('#loading').html(' + image + ');

            var query_url = "<?php echo site_url('item_controller/searchItem'); ?>";

            $.ajax({

                type:'POST',
                url: query_url,
                data:{query: $("#keyword").val()},
                dataType:'json',
                async: false,
                success:function(d){

                    //$('.display').dataTable().fnDestroy( true );

                    $("#example tbody").html(""); //HERE'S MY PROBLEM, DOESN'T DISPLAY LOADER WHEN SEARCHING

                    for(i in d){

                        $("#example tbody").append("<tr><td style='text-align: center; color:' data-code='TRUE'>" + d[i]['item_code'] + "</td><td style='text-align: left' data-name='TRUE'>" + d[i]['item_name'] + "</td><td><div style='text-align: center'><input type='button' value='ADD' class='k-button' id='" + d[i]['item_code'] + "' data-item=TRUE /></div></td></tr>");

                    }

                    //$("#search_result").show('blind');

                    $("[data-item]").on('click',function(){

                        var code = $(this).parents('tr').find('[data-code]').html();
                        var name = $(this).parents('tr').find('[data-name]').html();
                        // console.log(code,name);
                        $("#grid1 tbody").append("<tr><td style='text-align: center; width: 20%'><input type='text' value=" + code + " readonly style='width:50px; background-color: transparent; border-style: none' id=code" + counter_code++ +" /></td><td style='text-align: center; width: 40%'><input type='text' style='width: 90%; background-color: transparent; border-style: none' value='" + name + "' id=item"+ counter_item++ +" readonly /></td><td style='text-align: center'><input type='text' name='qty[]' id=qty"+ counter_qty++ +" style='text-align: center; width: 50px;' /></td><td style='text-align: center'><div align='center'><select style='width:100px; display: block' name='unit[]' id=unit"+ counter_unit++ +" ><option value=''>----</option><option value='pc/pcs'>PC/PCS</option><option value='BOX/BOXES'>BOX/BOXES</option></select></div></td><td style='text-align: center'><input type='text' name='price[]' id=price"+ counter_price++ +" style='text-align: right; width: 100px;' onblur='' /></td><td style='text-align: center'><input type='text' name='total[]' id=total"+ counter_total++ +" style='font-family: courier; text-align: right; background-color: lightgray; color: red; width: 100px;' readonly='readonly' value='' /></td></tr>");

                        ComputeTotal();

                    });

                    $('.display').dataTable({
                        "bPaginate": true,
                        "bLengthChange": true,
                        "bFilter": true,
                        "bSort": true,
                        "bInfo": true,
                        "bAutoWidth": false,
                        "bDestroy": true,
                        "bJQueryUI": false,
                        "bRetrieve": true,
                        "sPaginationType": "full_numbers",
                        "iDisplayLength": 25,
                        "destroy": true
                    });

                    //$('.display').dataTable().fnDestroy(true);

                    //$('.display').children().remove()

                },

            });    

        });

这是搜索表格

<div id="loading"></div>

<div id="search_result" class="k-content">
     <div class="k-header" id="item-view-list" align="center">

        <table border="0" style="width: 80%; align: left" cellpadding="10" cellspacing="10" align="left">
            <tr>
                <td colspan="3">
                    <h5>SEARCH ITEM</h5>
                </td>
            </tr>
            <tr>
                <td style="width: 3%">
                    <label>Name/Description</label>
                </td>
                <td style="width: 40%">
                    <input type="text" name="keyword" id="keyword" style="width: 80%" /> <input type="button" value="SEARCH" id="search-btn" class="k-button" style="font-size: 12px" />
                </td>
            </tr>
        </table>

        <hr />

        <table cellpadding="0" cellspacing="0" border="0" class="display" id="example" style="font-size:small; width: 100%">
            <thead>
                <tr>

                </tr>
                <tr>
                    <th>CODE</th>
                    <th>NAME/DESCRIPTION</th>
                    <th></th>
                </tr>
            </thead>
            <tbody>

            </tbody>
        </table>
        <br />

    </div>
</div>
jquery ajax
6个回答
21
投票

你可以这样做,

HTML

<div class="loader">
   <center>
       <img class="loading-image" src="loading.jpg" alt="loading..">
   </center>
</div>

CSS

.loading-image {
  position: absolute;
  top: 50%;
  left: 50%;
  z-index: 10;
}
.loader
{
    display: none;
    width:200px;
    height: 200px;
    position: fixed;
    top: 50%;
    left: 50%;
    text-align:center;
    margin-left: -50px;
    margin-top: -100px;
    z-index:2;
    overflow: auto;
}

在你里面

js

ajax
调用之前,

$.ajax({
  // your ajax code
  beforeSend: function(){
       $('.loader').show()
   },
  complete: function(){
       $('.loader').hide();
  }
});

12
投票

尝试这个代码。

$.ajax({
    type:'POST',
    url: query_url,
    data:{query: $("#keyword").val()},
    dataType:'json',
    async: false,
    success:function(d){
        // Your code.
    },
    beforeSend: function(){
        // Code to display spinner
    },
    complete: function(){
        // Code to hide spinner.
    }
});

请参阅此链接以获取更多详细信息。 Ajax 事件


7
投票

您需要创建

img
标签并将您的
image
添加为其
src
,例如

var image = "<?php echo base_url(). 'resources/loading/loading43.gif'; ?>";
$('#loading').html("<img src='"+image+"' />");
..

成功响应后,

$('#loading').html("").hide();

3
投票

你甚至可以让它变得太简单,比如

  1. ajax
    开始之前,显示加载器gif图像
  2. 一旦
    ajax
    返回响应,隐藏加载器gif图像

1)考虑到您有一个

img
标签(例如:className 是
loader
)放置在您需要加载程序的区域(默认情况下
display: none
此图像)。

要生成 loader gif,请尝试这个 ajaxloader 在线工具。

$('.loader').show();
// your ajax
$('.loader').hide();

2
投票

HTML

<!-- Using a text -->
<div id="loading">Loading...</div>

<!-- Using an image -->
<div id="loading"><img src="loader.svg" alt=""></div>

脚本

如果您要在多个地方使用它,您可以使用

beforeSend
complete
本地事件或
ajaxSend
ajaxComplete
全局事件。

当地活动

非常简单。

$.ajax({
    ...
    beforeSend: function(){
        $('#loading').show();
    },
    complete: function(){
        $('#loading').hide();
    }
});

全球活动

$(document).bind("ajaxSend", function(){
    $('#loading').show();
}).bind("ajaxComplete", function(){
    $("#loading").hide();
});

$.ajax({
    ...
    global: true, // boolean
    ...
});

您可以通过将其设置为

false
来禁用特定ajax的全局evet。

如果您在本地检查,则可以在浏览器中使用这些设置在加载页面时查看文本/图像。

enter image description here


0
投票

$("#loader").hide();

  $(function () {
    var loaderTimeout;
    var MIN_LOADER_TIME = 3000;

    $(document).ajaxStart(function () {
      if (loaderTimeout) {
        clearTimeout(loaderTimeout);
      }

      $("#loader").show();

      loaderTimeout = setTimeout(function () {
        $("#loader").hide();
      }, MIN_LOADER_TIME);
    });

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

    $(document).ajaxError(function () {
      $("#loader").hide();
    });
  });
#loader {
  position: fixed;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  z-index: 9999;
  background: url("//upload.wikimedia.org/wikipedia/commons/thumb/e/e5/Phi_fenomeni.gif/50px-Phi_fenomeni.gif")
    50% 50% no-repeat rgb(249, 249, 249);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <div id="loader">

    </div>

© www.soinside.com 2019 - 2024. All rights reserved.