将JSON对象传递到树上

时间:2012-08-21 13:22:25

标签: jquery json variables

我有一个在函数内返回的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...
    }
}

如果不完整的例子,请告诉我,谢谢提前克里斯

1 个答案:

答案 0 :(得分:0)

您可能应该详细了解scopes in JavaScript的工作原理。简单来说,在外部函数中创建的所有变量都可以在内部函数中使用。所以你只需要在其中一个“上层”函数中声明你的jsonText

请注意var中缺少submit:这样它会尝试在范围树中找到jsonText变量upper:

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

但是,在您的情况下,callbackdeferred会更好,因为在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)
        };
    }
    }
}