我正在使用prototypejs。代码是:
var someVariable;
new Ajax.Request('blah.php', {
method: 'post',
parameters: { username: $('username').value, password: $('password').value },
onComplete: function(response) {
//access someVariable here?
}
如何从我提到的地方获取someVariable?
答案 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
回调中的匿名函数内部使用。不确定您的计划是什么,但您可以为其赋值或在收到响应时将其用作另一个变量的赋值。