在AJAX请求之外设置变量
Set variable outside AJAX request
我试图创建一个ajax函数,该函数从页面返回一个特定字符串,然后将其设置在我创建的类中。但是,当我尝试在ajax成功参数中调用this.setGlideUser
时,它告诉我
object has no function setUserGlide.
当我尝试在成功参数之外调用this.setUserGlide
时,然后查看_glideUser
的值,_glideUser
是未定义的。下面是我的代码片段。
function main()
{
this.start = true;
}
main.prototype.load = function()
{
var _glideUser;
$.ajax(
{
url: '/home',
dataType: 'text',
success: function(data)
{
// Truncated
_glideUser = unescape(data).match(pattern);
}
});
this.setGlideUser(_glideUser);
return 1;
}
main.prototype.setGlideUser(user)
{
return this._glideUser = user;
}
main.prototype.getGlideUser()
{
return this._glideUser;
}
var _main = new main();
_main.load();
// check that the ajax has completely loaded
_main.getGlideUser(); // returns undefined
我想不出在Ajax成功函数的主类中设置_glideUser
变量的方法。我想在另一个函数中获得_glideUser
的值,用它来做事。有什么建议吗?
没有this._glideUser
,因为_glideUser
是本地的load
函数。与其在load
中声明var _glideUser
,不如将其设置为构造函数的公共属性:
function main()
{
this.start = true;
this._glideUser = null;
}
(您第一次调用setGlideUser
实际上会创建这样一个属性,但两者都有不是很混乱吗?)
setGlideUser
。您需要从success
回调中做到这一点:
main.prototype.load = function()
{
var that = this;
$.ajax(
{
url: '/home',
dataType: 'text',
success: function(data)
{
that.setGlideUser(unescape(data).match(pattern));
}
});
return 1; // what's the point?
}
我不太熟悉jQuery但ajax请求可能是异步的,所以你必须在ajax成功调用中调用setGlideUser,只需在实例中添加一个引用变量,然后从那里调用它:
var self = this;
$.ajax(
{
url: '/home',
dataType: 'text',
success: function(data)
{
self.setGlideUser(unescape(data).match(pattern));
}
});
给你们一个小提示你可以在js中有这样的getter和setter:
main.prototype.__defineSetter__("glideUser", function(value)
{
this._glideUser = value;
});
main.prototype.__defineGetter__("glideUser", function()
{
return this._glideUser;
});
编辑:看注释
在请求返回之前不调用
success
。异步。当数据值可用时,您需要在success本身中调用该方法。
main.prototype.load = function()
{
var _glideUser, that = this;
$.ajax(
{
url: '/home',
dataType: 'text',
success: function(data)
{
// Truncated
var = _glideUser = unescape(data).match(pattern);
that.setGlideUser(_glideUser);
}
});
// this.setGlideUser(_glideUser); this is incorrect
return 1;
}
关键字this表示当前作用域,在这种情况下(双关语)是ajax对象。通过将me赋值给外部对象中的this,需要对外部this对象的引用。
main.prototype.load = function()
{
var _glideUser;
var me = this;
$.ajax(
{
url: '/home',
dataType: 'text',
success: function(data)
{
// Truncated
_glideUser = unescape(data).match(pattern);
me.setGlideUser(_glideUser);
}
});
return 1;
}
尝试调用这个。setGlideUser在ajax成功参数
那是正确的。但是,成功方法中的this
关键字指向jqXHR对象,而不是main
实例;您需要取消对它的引用:
var that = this;
$.ajax({
url: '/home',
dataType: 'text',
success: function(data) {
_glideUser = unescape(data).match(pattern);
that.setGlideUser(_glideUser);
}
});
相关文章:
- 如何在定义js文件后为外部javascript文件设置变量
- 在 Jquery/Javascript 中使用多个 OR (||) 运算符时如何设置变量
- 在值内设置变量
- 在javascript函数中设置变量
- 设置变量时破坏游戏代码
- 未设置变量的赋值| jQuery的作用是什么
- 在可编辑行内设置变量
- 在不中断形式帖子的情况下在角度中设置变量
- MongoDB MonkAPI根据数据库请求之外可用的查找结果设置变量
- text方法中的javascript设置变量
- 如何为JavaScript函数设置变量以嵌入视频
- 使用jQuery和PHP加载区域设置变量
- 包括外部JS文件和设置变量
- 在jQuery File upload插件中设置变量上传路径
- 设置变量函数不起作用
- Session.get未在Meteor.js中设置变量
- 为cytoscape.js mapData设置变量限制
- 如何在脚本标记中设置变量
- 使用控制器在conditional.js.erb文件中设置变量
- 如何从控制台动态设置变量