2016-04-23 73 views
1

傢伙請參閱下面的Javascript代碼:JSON數據解析工作不

$(document).ready(function() { 
$('.loader').hide(); 
getDataUsers("userCount"); 
var obj = JSON.parse($("#hdUserCount").val()); 
userChart(obj.Actives, obj.InActives, obj.Discountinued, obj.recentlyJoined); 
}); 
function userChart(act, inact, disc, recent) { 
var chart = new CanvasJS.Chart("userChart", { 

            title: { 
     text: "Users" 

    }, 
            animationEnabled: true, 
            axisX: { 
     interval: 1, 
     gridThickness: 0, 
     labelFontSize: 10, 
     labelFontStyle: "normal", 
     labelFontWeight: "normal", 
     labelFontFamily: "Lucida Sans Unicode" 

    }, 
            axisY2: { 
     interlacedColor: "rgba(1,77,101,.2)", 
     gridColor: "rgba(1,77,101,.1)" 

    }, 

            data: [{ 
               type: "bar", 
               name: "Users", 
               axisYType: "secondary", 
               color: "#014D65", 
               dataPoints: [ 

                { y: act, label: "Active" }, 
                { y: inact, label: "InActive" }, 
                { y: disc, label: "DisContinued" }, 
                { y: recent, label: "Recently Joined" }, 
               ] 
              } 

    ] 
           }); 

chart.render(); 
} 
function getDataUsers(flagData) { 
$('.loader').fadeIn('fast'); 
$.post("Stats.ashx", { 
      flag: flagData, 
     }, function (data, status) { 
      $("#hdUserCount").val(data); 
      $('.loader').fadeOut('fast'); 
      alert(data); 
     }); 
} 

,問題是,當它在Firebug調試模式和線路運行3至5具有突破點是沒有問題的,並一切都很好。 但是!當我刪除斷點時,我認爲代碼的某些部分未被執行!有線!!!我認爲解析JSON數據的部分不起作用!

,這是由後接收的數據:{ 「活性物質」 0 「recentlyJoined」:::3, 「非活性物質」:4 「Discountinued」 6}

+0

我會嘗試加入一些'的console.log()'你認爲程序將不執行... – MarcoS

+0

這不是異步代碼的工作原理。當你嘗試'JSON.parse'這個DIV的內容時,發佈請求仍在進行中,因此你的div中沒有​​'data'。 – callback

+0

不錯!這顯然是原因!但我應該讓我的帖子同步? –

回答

1

這不是異步代碼的工作方式。這是你的函數應該是什麼樣子:

function getDataUsers(flagData, callback) { 
    $('.loader').fadeIn('fast'); 
    $.post("Stats.ashx", { 
      flag: flagData, 
      }, function (data, status) { 
       callback(data); 
      } 
    }); 
} 

然後你把它想:

getDataUsers('userCount', function(data) { 
     $("#hdUserCount").val(data); 
     $('.loader').fadeOut('fast'); 
     var obj = JSON.parse($("#hdUserCount").val()); 
     // Add the rest of code that relies on obj .. 
} 
+0

整潔而美麗!謝謝。就像你的例子一樣!所以由斷點造成的延遲是代碼正確執行的原因? –

+0

歡迎:) – callback