1

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

3 回答 3

3

不需要ajaxStartorajaxStop

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
于 2013-08-30T20:31:45.773 回答
0

如果您打算使用ajaxStopand 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  
于 2013-08-30T20:31:47.520 回答
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 函数调用的良好开端!

于 2013-08-30T20:55:20.270 回答