0

関数内に返されるJSONオブジェクト(以下を参照)があり、それは親関数内にあり、次にグローバル関数内にあります。そのグローバル関数内に、レコードを解析するためにJSONにアクセスする必要がある子関数がさらにあります。

私は実際には問題の一部ではないが、うまくいけば私が抱えている問題を説明するのに十分なものを含めたいくつかのことを省略しました!あなたはそれを見ることができます

MyFunc.prototype.CreateMine = function(){
//do some work...
    submit: function(e,v,m,f){
        var xhr = new jsonRequest()
        xhr.onreadystatechange = function(){
            var jsonText = JSON.parse(xhr.responseText); //jsonText now contains my data
        };
    }
//need to access jsonText...
    }
}

例が十分に完了していない場合はお知らせください。事前にChrisに感謝します。

4

1 に答える 1

0

おそらく、JavaScriptのスコープがどのように機能するかについてもっと学ぶ必要があります。簡単に言うと、外部関数で作成されたすべての変数は、内部関数で使用できます。したがってjsonText、「上位」関数の1つで自分を宣言する必要があります。

varinがないことに注意してください:このようにして、スコープツリーの上位の変数submitを見つけようとします:jsonText

MyFunc.prototype.CreateMine = function(){
    var jsonText
    //do some work...
    submit: function(e,v,m,f){
        var xhr = new jsonRequest()
        xhr.onreadystatechange = function(){
            jsonText = JSON.parse(xhr.responseText); //jsonText now contains my data
        };
    }
    jsonText // available
    }
}

ただし、あなたの場合、 inは非同期に変更されるため、コールバックまたは延期の方が適してsubmit jsonTextいます。そのため、を呼び出した直後にアクセスすることはできませんsubmit

function myCallback(myData) {
    // do smt with your data
}
MyFunc.prototype.CreateMine = function(){
    //do some work...
    submit: function(e,v,m,f){
        var xhr = new jsonRequest()
        xhr.onreadystatechange = function(){
            var jsonText = JSON.parse(xhr.responseText);
            myCallback(jsonText)
        };
    }
    }
}
于 2012-08-21T13:30:21.347 に答える