2012-01-30 12 views
0

我有以下的jQuery函数:为我的JQuery Ajax Json解析函数中的Google Chart设置数据?

function doReport(query) { 
    var rowArray = []; 
    $.ajax({ 
     url: 'http://xxxxxxx' + query, 
     dataType: 'json', 
     success: function(data) { 
      var sales = $('#salesDiv'); 
      sales.html(''); 
      for (res in data['sales']) { 
       sales.append('<div>' + data['sales'][res]['contractName'] + ' : $' + data['sales'][res]['salesAmount'] + '</br></div><br />'); 
       rowArray.push([data['sales'][res]['contractName'],data['sales'][res]['salesAmount']]); 
        alert("this works! "+rowArray[0]); 
      } 
     } 
    }); 
    alert("this doesnt work "+rowArray[0]); 
    drawChart(rowArray); 

我的问题是在我的第一个警报(这个作品!)我可以看到rowArray的价值。 但在第二次警报(这不起作用),值返回为未定义。

我在做什么错了?请帮忙! 我想将这些值传递给我的drawChart函数,并让我的漂亮的谷歌饼图出现!

回答

0

基本上$.ajax是异步工作的。所以你的代码可能不总是工作。

呼叫drawChart里面的回调。

function doReport(query) { 
    var rowArray = []; 
    $.ajax({ 
     url: 'http://xxxxxxx' + query, 
     dataType: 'json', 
     success: function(data) { 
      var sales = $('#salesDiv'); 
      sales.html(''); 
      for (res in data['sales']) { 
       sales.append('<div>' + data['sales'][res]['contractName'] + ' : $' + data['sales'][res]['salesAmount'] + '</br></div><br />'); 
       rowArray.push([data['sales'][res]['contractName'],data['sales'][res]['salesAmount']]); 
        alert("this works! "+rowArray[0]); 
      } 
      drawChart(rowArray); 
     } 
    }); 
    alert("this doesnt work "+rowArray[0]); 
    //drawChart(rowArray); - moved 

EDITED

FYI,从jQuery的API文件(http://api.jquery.com/jQuery.ajax/)

Ajax中的第一个字母代表“异步”,表示的 操作发生并行,并且完成的顺序为不是 保证。 $ .ajax()的async选项默认为true,表示 代码执行可以在请求完成后继续。 设置 这个选项设置为false(从而使通话不再异步) 强烈反对,因为它会导致浏览器变得 响应。

+0

感谢您的回复。 – user1175857 2012-01-31 20:08:53