使用jquery加载消息

时间:2013-08-30 20:25:29

标签: ajax jquery

当我的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

3 个答案:

答案 0 :(得分:3)

无需ajaxStartajaxStop

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

答案 1 :(得分:0)

如果您已开始使用ajaxStopajaxStart,那么您应该将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  

答案 2 :(得分:0)

问题是“这个”

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

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

http://devlicio.us/blogs/sergio_pereira/archive/2009/02/09/javascript-5-ways-to-call-a-function.aspx

上面的链接可以是了解更多有关js函数调用的好开始!