使用Deferred对象来反应Ajax未定义的方法

时间:2015-04-16 04:05:49

标签: javascript jquery ajax reactjs

我对React很新。我试图使用AJAX调用更新React组件的状态,该调用返回Deferred对象的promise。

componentDidMount: function() {
     window.AlbumAPI.get_albums().then(function (response) {
     console.log(data);
     this.setState(data);
});

以及组件调用的方法:

window.AlbumAPI = {
  get_albums: function() {
    var deferred = new $.Deferred();
    $.ajax({
     url: '/albums',
    }).done(function(res) {
     deferred.resolve(res);
    });
    return deferred.promise();
  }
};

控制台日志正在返回正确的对象,正如我所期望的那样,一个JS数组。但是SetState()为以下行抛出一个未定义的方法:

.done(function(res)

在组件中,我尝试以正确的语法使用.when和.done,无论如何都会遇到相同的错误。

1 个答案:

答案 0 :(得分:1)

解决方案是绑定函数,因为它是一个匿名回调:

componentDidMount: function() {
     window.AlbumAPI.get_albums().then(function (response) {
         console.log(response);
        this.setState(response);
    }.bind(this));
}