1

我有这个功能:

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);
}

出于某种原因,我可以看到andconsole.log的值,但我得到了.xArryArrchartDesc is not definedchartDesc

如果我将这条线移动console.log(chartDesc)到这条线的下方,var chartDesc = json.INFO.DESC我可以正确地看到它。

这是为什么?

4

3 回答 3

3

chartDesc在 AJAX 回调函数中声明变量,因此它超出了您以后引用它的范围。

要解决此问题,请var从行首删除 ,而是在函数顶部使用xArrandyArr变量声明它:

var xArr = [];
var yArr = [];
var chartDesc = "";
于 2012-05-17T08:13:39.587 回答
1

chartDesc变量范围与success函数相关联,这就是为什么在它之外,变量是undefined. 在Javascript函数中为定义的变量创建范围var

于 2012-05-17T08:13:59.910 回答
0

做你的

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

功能内success。并chartDesc在成功函数之外删除变量,

xArr成功函数外的控制台日志在函数调用时立即执行,但yArr由于成功函数执行,插入值需要一些时间。所以你在日志中什么也得不到。

于 2012-05-17T08:13:49.543 回答