javascript - 在 AJAX 请求之外设置变量

标签 javascript jquery

我正在尝试创建一个从页面返回特定字符串的 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,而是将其设置为构造函数中的公共(public)属性:

function main()
{
    this.start = true;
    this._glideUser = null;
}

(您对 setGlideUser 的第一次调用实际上会创建这样一个属性,但同时拥有这两个属性不会造成混淆吗?)

此外,正如其他人提到的,您正在尝试 setGlideUser before 您的 ajax 操作完成。您需要从 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?
}

关于javascript - 在 AJAX 请求之外设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14014735/

相关文章:

Javascript 在输入文本中复制占位符功能

javascript - 奇怪但有效的 var 声明语法

javascript - jQuery函数的使用

javascript - jquery如何控制浏览器选项卡变化

javascript - 如何使用javascript或jquery动态检查表格每一行中复选框的值

javascript - 保存网页 View 游戏分数

javascript - getText 和 getAttribute 获取 Protractor 中输入字段的空值

javascript - 使用 Ajax 创建 session 并回显结果

php - 使用 Ajax 提交表单

javascript - jquery $ 函数在 IE 中返回不同的结果