jQuery ajax发布成功 - 将数据保存到变量

时间:2012-05-17 08:11:36

标签: javascript jquery

我有这个功能:

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

出于某种原因,我可以在console.log中看到xArryArr的值,但我chartDesc is not defined获得了chartDesc

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

为什么?

3 个答案:

答案 0 :(得分:3)

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

要解决此问题,请从该行的开头删除var,然后使用xArryArr变量将其声明在该函数的顶部:

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

答案 1 :(得分:1)

chartDesc变量范围与success函数相关联,这就是为什么在它之外,变量是undefined。 在Javascript函数中,为使用var

定义的变量创建范围

答案 2 :(得分:0)

制作你的

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

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

成功函数之外的

控制台日志在调用函数时立即执行,但由于成功函数执行,插入xArryArr的值需要一些时间。所以你没有得到任何记录。