Reactjs Ajax在获取json对象时返回第一个空数组

我遇到了问题。 我正在学习React js,我有一个模板,我必须编辑。 我需要添加一些ajax方法来获取和发送信息。 我设法做了一些这些动作,但现在我遇到了问题。</ p>

我有php脚本,它让我json_encode。</ p>

   getCategories:function(){
$ .ajax({
url:'######### my_url #########',
dataType:'json',
成功 :function(data){
this.setState({datas:data});
} .bind(this)
});
},
</ code> </ pre>

我有这个</ p>

  getInitialState:function(){
return {datas:[]};
},
</ code> </ pre >

问题是我总是首先获得空数组,然后是结果。 当我尝试使用它时,它会让我产生错误,因为它试图映射空数组。 在我尝试使用该对象之前,这是console.log。</ p>

  [HMR]等待来自WDS的更新信号... 

[]
\ n [WDS]热模块更换已启用
[对象,对象,对象,对象]
</ code> </ pre>

如何在对象已满后使其工作? </ p>
</ div>

展开原文

原文

I have a problem. I am learning React js and I have a template which i must edit. I need to add some ajax methods for getting and sending info. I manage to do some of those actions but now I have a problem.

I have php scripts which is getting me json_encode.

getCategories: function() {
$.ajax({
  url: '#########my_url#########',
  dataType: 'json',
  success: function(data) {
    this.setState({datas: data});
  }.bind(this)
});
},

and I have this

getInitialState: function() {
  return {datas: []};
},

The problem is I always get firstly the empty array and then the result. And when I try to work with it, it gets me error because it tries to map the empty array. This is the console.log before I try to play with the object.

[HMR] Waiting for update signal from WDS...

[]

[WDS] Hot Module Replacement enabled
[Object, Object, Object, Object]

How can I make it to work after the object is full?

1个回答



第一个选项:在ajax调用成功时呈现视图</ p>

第二个选项:预测案例你的 state.datas仍为空</ p>

例如,如果您正在使用渲染函数,请尝试:</ p>

  {this.state.datas  ?  &LT; DIV&GT; 正在加载&lt; / div&gt;  :&lt; .... 
</ code> </ pre>

上面是JSX语法</ p>

希望有所帮助</ p>

编辑:</ strong> </ p>

  if(this.state.datas.length == 0){
var mycomponent =&lt; div&gt; 正在加载...&lt; / div&gt ;;
}其他{
var mycomponent = this.state.datas;
}
</ code> </ pre>

基本上这应该有效 。</ p>
</ div>

展开原文

原文

First option: render your view on ajax call success

Second option: anticipate the case your state.datas is still empty

for example if you're working in your render function try:

   { this.state.datas ? <div> Loading </div> : <....

Above is JSX syntax

Hope it helps

EDIT:

if(this.state.datas.length == 0) {
    var mycomponent =<div> Loading ... </div>;
} else {
   var mycomponent = this.state.datas;
}

Basically this should work.

douyan7916
douyan7916 谢谢。 我已经颠倒了if语句中的逻辑。 抱歉。 它现在正在运作。 谢谢。
大约 5 年之前 回复
douzi1350
douzi1350 你不需要使用jquery,我认为你的支票写得不正确我编辑了我的帖子
大约 5 年之前 回复
doufan9377
doufan9377 if(jQuery.isEmptyObject(this.state.datas)){var RowsBaby = this.props.datas.map(function(data){return(<Row title = {data.title} />)}); } else {var RowsBaby = <Row title =“not loading”/>}这是我添加的代码,它给了我Uncaught TypeError:无法读取属性'map'的undefined Againt它无法读取对象。
大约 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐