2009-10-08 78 views
0

我想做一個異步請求從我的服務器獲取一些數據。這一切都可以在Firefox中很好地工作,但在Internet Explorer中,在收到任何數據之前立即調用回調。

$.ajax({ 
    url: "charts.php", 
    data: { site: site, start: toDateString(start), end: toDateString(end) }, 
    cache: false, 
    dataType: "json", 
    success: 
    function(data) { 

      var dataPoints = []; 

      if(data.length == 0){ 
       $("#error").children("label").eq(0).html("There were no results for the site and range selected."); 

       if($("#error").css("display") == "none"){ 
        $("#error").toggle(); 
       } 

       $("#large-loader").toggle(); 
       return false; 

      } 


      //add each pair of time/maxcalls to an array 
      $.each(data, function(i, item){ 
        var minute = item[0]; 

        dataPoints.push({ 
         label: pad(parseInt(minute/60)) + ":" + pad((minute%60)), 
         data: [minute, item[1]] 
        }); 
      }); 

      var options = { 
       xaxis : { 
        ticks : 24, 
        tickSize: 60 
        }, 
       legend : { 
        show: true, 
        margin: 10, 
        backgroundOpacity: .3 
        }, 
       grid: { 
        hoverable: true 
        } 
      }; 


      //hide loader, show chart 
      $("#large-loader").toggle(); 

      $("#chart-container").toggle(); 
      $.plot($("#chart"), [data], options); 



     } 
}); 

回答

0

length屬性存在於數組中,但不存在於對象中。例如,在你的螢火控制檯,您可以鍵入:

var a={'a':'e','b':'c'}; 
a.length==undefined;//true 

然後用數組試試吧:

var a=['a', 'b','c','d']; 
a.length;//4 


在答覆意見: 你應該能夠做到 $.each上沒有問題的空物體。你可以保留一個計數器,例如

  var resultCount=0; 

      $.each(data, function(i, item){ 
          resultCount++; 
          //... 

      }); 

      if(resultCount == 0){ 
        //error 
        return false; 

      } 

這就是說,我不確定這是否真的是你的問題(但請檢查,因爲它可能是)。您是否在IE中試過alert ing data?有時你只需要不停地移動警報,直到找到問題。

+0

如果是這樣的話,我該如何判斷數據對象是否包含任何東西?此外,該表達式正在評估爲真... – scottm 2009-10-08 22:02:15

+0

有可能他的json結果實際上包含長度屬性 – Matt 2009-10-08 22:05:29

+0

@Matt,我沒有明確定義一個 – scottm 2009-10-08 22:06:16

相關問題