2016-04-23 52 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