Javascript 类 - 无法设置属性

标签 javascript jquery

我有下面的代码来在 javascript 中创建一个类......现在我只会传递“网站”的 ID,然后通过 ajax 调用我将从数据库中获取其余信息(JSON ENCODED )。

现在我唯一的问题是,当我看到对象最后的内容时,它只显示 ID。

ajax 调用工作正常,因为如果我在成功(ajax)后提醒 this.address 它会显示结果。

我认为我无法使用 ajax 请求设置属性...你能帮忙吗?

function website(id) {
     this.id = id; //id


     $.ajax({  //website_information
      type: "GET",
      url: '/proc.php?proc=website_name&id=' + this.id + '',
      success: function(data){
      var tmp = $.parseJSON(data);
     this.address = tmp.website_address;

     this.name = tmp.website_name;
      }
    });

    }

    var obj = new website('20');
    obj.alertwebsite();
    console.log(obj);

最佳答案

这里有两个问题。首先是 $.ajax 是异步的。这意味着它会在请求完成之前返回。 success 函数在请求完成时运行,但 obj.alertwebsite() 将在请求完成之前运行。

第二个问题是 AJAX 回调中 this 的值。在回调中,this 设置为包含 AJAX 调用的所有设置的对象。这意味着您正在此对象上设置 addressname 属性。有两种方法可以解决这个问题。第一个是 that = this 就像其他答案一样。更好的方法是在 AJAX 调用中使用 context 设置:

function website(id) {
    this.id = id; //id

    $.ajax({ //website_information
        type: "GET",
        url: '/proc.php?proc=website_name&id=' + this.id + '',
        context: this,
        success: function (data) {
            var tmp = $.parseJSON(data);
            this.address = tmp.website_address;

            this.name = tmp.website_name;
        }
    });
}

这允许您自定义回调中this的含义。这记录在the jQuery AJAX documentation中.

关于Javascript 类 - 无法设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10497749/

相关文章:

javascript - jquery 错误 n 无效的选择器

javascript - 无法访问 Javascript for 循环中存在的 If 语句内的数组

jquery - 我们如何从 web.config 中使用 jquery 读取或获取 session 超时,以便我们可以在 mvc 中处理 session 过期

javascript - HTML动态背景文字

javascript - 地理空间框查询 - Mongoose、Node.js MongoDB - 不返回任何结果

javascript - 我想要一个 jquery 日期选择器将默认日期更改为来自超链接的文本

javascript - 当ajax加载内容时,如删除按钮不起作用

jquery - 运行 jQuery 的 Submit() 函数时表单不提交

javascript - 访问另一个组件中的 vue 组件数据时遇到问题

javascript - JS 将文本添加到输入中(如果尚未输入)