在reactjs react.Component中异步AJAX请求后无法获取

时间:2015-08-31 13:04:35

标签: javascript jquery ajax reactjs components

我的reactjs代码有问题。我已经阅读了关于异步世界和可能发生的问题的帖子,我想我已经解决了这个问题,但是现在我得到了一个空白的文字“Can not GET / thenameofthepage”。

这是我在react.Component

之后的代码
getList() {
    var returnValue;
      $.ajax({
        type: "get",
        url: "###URL###",
        cache: false,
        async: false,
        success : function(data) {
         returnValue = data;
        }
      });

    return returnValue;
  }

这是render(){

之后的代码
console.log(this.getList());

如果我控制台登录该功能,那么一切都还可以。但是当我尝试将它传递给变量时,一切都会中断。我做了异步。不工作。我尝试初始状态和ComponentDidMount()再次无法正常工作。

P.S

我尝试使用互联网指南:

constructor() {
    this.state = { data: [] };
  }
  getList() {
    $.ajax({
      type: "get",
      url: "http://havvamustafa.devel.signature.eu.com/manage/collection/list_all_ajax",
      cache: false,
      dataType: 'json',
      success: (data) => {
        this.setState({data: data});
      }
    });
  }

然后

componentDidMount() {
    this.getList();
  }

最后

console.log(this.state.data);

现在它因为构造函数而给我错误。

1 个答案:

答案 0 :(得分:2)

从Jquery $ .ajax的文档中,不推荐使用async: false

  

async(默认值:true)

     

类型:布尔值

     

默认情况下,所有请求都是异步发送的(默认情况下设置为true)。如果需要同步请求,请将此选项设置为false。跨域请求和dataType:“jsonp”请求不支持同步操作。请注意,同步请求可能会暂时锁定浏览器,并在请求处于活动状态时禁用任何操作。 从jQuery 1.8开始,不推荐使用async:false和jqXHR($ .Deferred);您必须使用success / error / complete回调选项而不是jqXHR对象的相应方法,例如jqXHR.done()或不推荐使用的jqXHR.success()。

我不知道在处理异步数据提取时你会想到什么样的问题,但不要忘记在请求待处理时使用同步请求冻结浏览器。您可以通过以下方式轻松实现:

getList() {
  $.ajax({
    type: "get",
    url: "###URL###",
    cache: false
  }).done(this.handleSuccess);
},

handleSuccess(results) {
  this.setState({data: results});
}

您的数据处理是通过其他方法完成的,它会更干净!