jQuery - 从下拉列表中更改选项时显示加载符号

时间:2016-08-09 12:03:52

标签: javascript jquery ajax load

我有以下选择菜单:

<select name="period" id="stats-period">
        <option value="all">All time</option>
        <option value="360">12 months</option>
        <option value="270">9 months</option>
        <option value="180">6 months</option>
        <option value="90">3 months</option>
        <option selected="selected" value="30">30 days</option>
        <option value="7">7 days</option>
    </select>

当我从下拉列表中选择一个选项时,我会进行ajax调用以便从数据库中获取正确的记录,所以这是我的脚本:

function timePeriod(changePeriod) {

                var url = '<?= admin_url('reports/change_period') ?>';

                $.post(url, {period: changePeriod}, function (response) {

                    var json = $.parseJSON(response);

                    if (json.error == true) {
                        $('#reports').hide();
                        $('#no-reports').show();
                    } 
                    else {
                        $('#reports').show();
                        $('#no-reports').hide();

                        $('#numprojects').text(json.projects);
                        $('#average-cost').text(json.average_cost.toFixed(2));
                        $('#over-budget').text(json.over_budget);
                        $('#average-client-flags').text(json.average_client_flags);
                        $('#average-delayed').text(json.average_delayed.toFixed(1));
                    }
                });
            }

            $('#stats-period').on('change', function(){
                var selected = $(this).val();
                timePeriod(selected);
            });

我不想做的是在更改下拉列表的选定值时显示加载符号,直到ajax调用完成,我该怎么做?

3 个答案:

答案 0 :(得分:0)

在将执行Ajax调用的函数的开头显示加载符号。并删除Ajax调用的success:内的加载符号。

答案 1 :(得分:0)

假设您的加载gif位于ID = #myDiv

的div中
function timePeriod(changePeriod) {

    var url = '<?= admin_url('reports/change_period') ?>';

    $('#myDiv').show();

    $.post(url, {period: changePeriod}, function (response) {

        $('#myDiv').hide();

        var json = $.parseJSON(response);

        >SNIP<

答案 2 :(得分:0)

如果尚未存在加载元素,则可以创建加载元素,相对于您的选择选项显示位置。从服务器获得响应后,您可以隐藏它:

function timePeriod(changePeriod) {
    var url = '<?= admin_url('reports/change_period') ?>';
    if ($('#loading').length == 0) {
        loading = $('<img src="loading.gif" alt="" id="loading" />')
        $('body').append(loading)
        loading.hide();
    } else {
        loading = $('#loading');
    }
    loading.position({
      my: "left top",
      at: "right top",
      of: "#stats-period"
    }).show();
    $.post(url, {period: changePeriod}, function (response) {
        loading.hide();

        var json = $.parseJSON(response);
        if (json.error == true) {
            $('#reports').hide();
            $('#no-reports').show();
        } 
        else {
            $('#reports').show();
            $('#no-reports').hide();

            $('#numprojects').text(json.projects);
            $('#average-cost').text(json.average_cost.toFixed(2));
            $('#over-budget').text(json.over_budget);
            $('#average-client-flags').text(json.average_client_flags);
            $('#average-delayed').text(json.average_delayed.toFixed(1));
        }
    });
}

$('#stats-period').on('change', function(){
    var selected = $(this).val();
    timePeriod(selected);
});