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

何らかの理由で、 と の値を確認できますが、console.logを取得します。xArryArrchartDesc is not definedchartDesc

console.log(chartDesc)この線の下に線を移動すると、var chartDesc = json.INFO.DESC正しく表示されます。

何故ですか?

4

3 に答える 3

3

chartDescAJAX コールバック関数内で変数を宣言しているため、後で参照する範囲外です。

これを修正するには、行頭から を削除し、代わりにおよび変数varを使用して関数の先頭で宣言します。xArryArr

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

chartDesc変数のスコープは関数に関連付けられているため、success関数の外側では変数はundefined. in Javascriptfunctions で定義された変数のスコープを作成しますvar

于 2012-05-17T08:13:59.910 に答える
0

あなたの

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

関数内success。そしてchartDesc、成功関数の外側で変数を宣言し、

xArr成功関数の外部のコンソール ログは、関数が呼び出されるとすぐに実行されますが、成功関数の実行により、値を挿入するのに時間がかかりますyArr。そのため、ログには何も表示されません。

于 2012-05-17T08:13:49.543 に答える