从新对象定义中访问变量

时间:2011-05-13 06:36:44

标签: javascript prototypejs

我正在使用prototypejs。代码是:

var someVariable;
new Ajax.Request('blah.php', {
        method: 'post',
        parameters: { username: $('username').value, password: $('password').value },
        onComplete: function(response) {
            //access someVariable here?
        }

如何从我提到的地方获取someVariable?

2 个答案:

答案 0 :(得分:1)

您只需按照通常的名称来引用它。在您的代码中,您为onComplete指定的函数是在定义someVariable的上下文中的闭包,因此它具有对该变量的持久引用。

var someVariable;
new Ajax.Request('blah.php', {
    method: 'post',
    parameters: { username: $('username').value, password: $('password').value },
    onComplete: function(response) {
        someVariable = /* some value */;
    }

有关闭包的更多信息:Closures are not complicated

请注意,当您在已返回的函数中执行此操作时,情况甚至如此:

function doSomeAjax() {
    var someVariable;
    new Ajax.Request('blah.php', {
        method: 'post',
        parameters: { username: $('username').value, password: $('password').value },
        onComplete: function(response) {
            someVariable = /* some value */;
        }
    });
}

由于ajax调用是异步的,doSomeAjax将在调用onComplete函数之前返回。这很好,someVariable仍然存在,因为还有一些东西(你的onComplete函数)引用它们被定义的上下文,所以上下文保存在内存中。

答案 1 :(得分:0)

只要您的变量someVariable处于同一级别或上下文(在闭包或函数内),您就可以在onComplete回调中的匿名函数内部使用。不确定您的计划是什么,但您可以为其赋值或在收到响应时将其用作另一个变量的赋值。