2013-08-30 136 views
1

我有這個加載消息,而我的ajax調用檢索數據。但是我得到了奇怪的結果。要麼消息出現,並且中途呈現,直到ajax完成或者完全出現,讓用戶想知道什麼是錯誤的。我需要一個加載消息的原因是,當檢索數據時,它的延遲時間大約爲5-10秒,對話框打開後繪製地圖,然後使用標籤重繪地圖的要素圖層。使用jquery加載消息

這裏是我的代碼:

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 
+0

我不認爲有什麼理由在'ajaxStop()'方法中包裝'hide()'方法 - 你使用的是成功函數,所以除非你的'openBox'或'init'方法是做一個Ajax調用,你可以在你的成功函數的最後一行調用'hide'。 –

回答

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 
+0

我原來的答案錯誤地使用了'$(this)',當我相信你的意思是'#loading' –

+0

現在我工作的很好,我只需要平滑它並定位加載消息和背景謝謝 –

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