2012-05-17 19 views
1

我有這樣的功能:jQuery的ajax的崗位上取得成功 - 將數據保存到變量

function getReport(name,x) { 
    var xArr = []; 
    var yArr = []; 
    $.ajax({ 
     async: false, 
     type: "POST", 
     //async: false, 
     //dataType: "json", 
     url: "reportAjax.php", 
     data: "name="+ name, 
     success: function(data){ 
      var json = $.parseJSON(data); 
      var chartDesc = json.INFO.DESC; 
      $.each(json.RESULT, function(i, object) { 
       $.each(object, function(property, value) { 
        //alert(property + "=" + value); 
        if (property == x) { 
         xArr.push(value); 
        } 
        else { 
         yArr.push(parseInt(value)); 
        } 

       }); 
      });     
     } 
    }); 
    console.log(xArr); 
    console.log(yArr); 
    console.log(chartDesc); 
    drawChart(xArr,yArr,chartDesc); 
} 

出於某種原因,我可以看到的xArryArrconsole.log的價值觀,但我得到了chartDesc is not definedchartDesc

如果我將console.log(chartDesc)行移到此行var chartDesc = json.INFO.DESC下,我可以正確看到它。

這是爲什麼?

回答

3

您在AJAX回調函數中聲明瞭chartDesc變量,因此它在您之後引用它的範圍之外。

爲了解決這個問題,從行開始刪除var,而是在功能上與xArryArr變量聲明它:

var xArr = []; 
var yArr = []; 
var chartDesc = ""; 
+0

這就是它,謝謝。我會盡可能接受你的答案。 – user838437

+0

沒問題,很樂意幫忙。 –

0

讓你

console.log(xArr); 
console.log(yArr); 

success功能。和declire chartDesc變量的成功函數外,

控制檯登錄成功函數立即執行時調用的函數之外,但需要一定的時間來插入的xArryArr值,由於成功函數執行。所以你在日誌裏什麼也得不到。

1

chartDesc變量作用域綁定到success函數,這就是爲什麼在它之外,變量是undefined。 在Javascript功能創建變量的範圍用var