Ajax 使用jquery加载消息

Ajax 使用jquery加载消息,ajax,jquery,Ajax,Jquery,当我的ajax调用检索数据时,我有这个加载消息。但我得到了奇怪的结果。要么消息出现并在ajax完成之前呈现一半,要么根本不出现,让用户怀疑到底出了什么问题。我需要加载消息的原因是,在检索数据时大约有5-10秒的延迟。打开对话框后,绘制地图,然后使用标签重新绘制地图的要素图层 这是我的密码: function loadData(v) { var reg = 1; var vId = v; var d =

当我的ajax调用检索数据时,我有这个加载消息。但我得到了奇怪的结果。要么消息出现并在ajax完成之前呈现一半,要么根本不出现,让用户怀疑到底出了什么问题。我需要加载消息的原因是,在检索数据时大约有5-10秒的延迟。打开对话框后,绘制地图,然后使用标签重新绘制地图的要素图层

这是我的密码:

function loadData(v) 
{       
    var reg = 1; 
    var vId = v;                       
    var d =
    {
        regionType: reg,
        varId: vId
    };

    //$("#loading").ajaxStart(function () {
    //    $(this).show();
    //}).ajaxStop(function () {
    //    $(this).hide();
    //});

    $("#loading").ajaxStart(function () {
        $(this).show();
    });

    $.ajax({
        type: "GET",
        url: WebRoot + "ws/bis.asmx/Data",
        data: d,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {                

            fipsData = data.d;
            openBox(d); 
            init(regType, varId);

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

        } //ends success function
    });  //ends ajax call         
}; //ends message

无需使用
ajaxStart
ajaxStop

function loadData(v) 
{       
    var reg = 1; 
    var vId = v; 
    var $loading = $("#loading");                      
    var d =
    {
        regionType: reg,
        varId: vId
    };


    // Starts immediately after this line so no need to use ajaxStart
    $loading.show();

    $.ajax({
        type: "GET",
        url: WebRoot + "ws/bis.asmx/Data",
        data: d,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {                

            fipsData = data.d;
            openBox(d); 
            init(regType, varId);

        }, //ends success function

        // Fires even if a failure, so loading spinner won't hang around for no reason
        done: function() {
          $loading.hide();
        }
    });  //ends ajax call         
}; //ends message

如果设置为使用
ajaxStop
ajaxStart
,则应将
ajaxStop
处理程序移到成功回调之外

$("#loading").ajaxStart(function () {
    $(this).show();
}).ajaxStop(function () {
    $(this).hide();
});

    $.ajax({
        type: "GET",
        url: WebRoot + "ws/bis.asmx/Data",
        data: d,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {                

            fipsData = data.d;
            openBox(d); 
            init(regType, varId);

        } //ends success function
    });  //ends ajax call  
问题是“这个”

“this”变量的变化取决于调用函数的方式


以上链接是了解更多js函数调用的良好开端

我认为没有任何理由将您的
hide()
调用包装在
ajaxStop()
方法中-您正在使用success函数,因此除非您的
openBox
init
方法正在进行ajax调用,你可以在成功函数的最后一行调用
hide
。我最初的回答是错误地使用了
$(这个)
,我相信你的意思是
#加载
是的,现在效果很好。我只需将其平滑,并定位加载消息和背景谢谢
$.ajaxStart(function () {
    $("#loading").show();
});