在 Vue.JS 中显示 Axios 响应数据

Posted

技术标签:

【中文标题】在 Vue.JS 中显示 Axios 响应数据【英文标题】:Display Axios response data in Vue.JS 【发布时间】:2020-04-08 13:48:58 【问题描述】:

我编写了这段 Vue.JS 代码,以对话格式显示从 php 文件接收到的 JSON 响应。我当前的代码如下所示:

    const app = new Vue(
    el: "#chatview",
    data: 
            messages:[],
            txtInput: '',
            mid:0
        ,
    methods:

    GetBubbleType: function (name)     
                    if(name === "AI")
                     return "yours messages";
                    else
                     return "mine messages";
                ,
   ,   
   mounted()
        axios.post('./ConversationGetter.php',
            function2call: 'getRecord',
            id: 1,
        ).then( response =>  console.log(response.data);
         this.data=response.data;
        ).catch(error => );

        ,      
  template: `
  <div style ="font-family:Open Sans;font-size:16px">
  <div v-for="message in messages">
    <div class="fade-in">
      <div v-bind:class="GetBubbleType(message.name)">
        <div class="message last">
          <p>message.message</p>
        </div>
      </div>
    </div>
  </div>
  <form @submit.prevent="sendMessage('out')"  id="person-form">
    <p>
      <input type="text" placeholder="Enter Your Query Here"style=" border-radius=25px" v-model="txtInput">
      </input>
      <input type="submit" placeholder="Send"style=" border-radius=25px">
      </input>
    </p>
  </form>
</div>

  `
)

从 PHP 收到的响应是(写在控制台上):


  "data": [
    
      "Modified_Time": "2019-12-13T16:08:36+05:30",
      "$currency_symbol": "$",
      "Message": "Hey!",
      "Created_Time": "2019-12-13T16:08:36+05:30",
      "Name": "AI",
    ,
    

      "Modified_Time": "2019-12-13T16:08:27+05:30",
      "$currency_symbol": "$",
      "Message": "Yo!",
      "Created_Time": "2019-12-13T16:08:27+05:30",
      "Name": "Me",
    ,

  ],

PHP的返回行是:echo $result; return $result;

由于某种原因,它没有在聊天视图中显示消息。我哪里出错了?

【问题讨论】:

【参考方案1】:

您的模板正在对来自组件的datamessages 对象执行v-for。但是,您分配的是this.data=response.data。这是在组件实例上创建属性 data,而不是分配 messages 值。

相反,只需将this.data=response.data 更改为this.messages=response.data.data

如 cmets 中所述,您的响应正文在根中包含一个 data 数组,而 Axios 在 response.data 中返回响应正文,因此应该将 response.data.data 分配给 this.messages

【讨论】:

感谢您的回答。现在它打印两条空消息。我想访问树结构存在一些问题。我哪里出错了? 区分大小写。将模板中的 message.namemessage.mesaage 改为 message.Namemessage.Message 还是不行。整个响应存储在“消息”中,使其形成一个树结构 messages->data->0->message=Something。 啊,所以您的数据在根目录下有一个data 属性? axios 中的响应具有response.data 的响应正文。所以你需要做this.messages=response.data.data

以上是关于在 Vue.JS 中显示 Axios 响应数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 vue.js 前端通过集合数据显示 laravel 组

当 API 返回空数据时显示警告(Vue.js / Axios)

Axios 响应数据和 Vue JS , 使用数据

Vue.js - 如何通过 axios 响应数据从对象中获取特定字段

在 axios 调用时,DOM 不显示 vue.js 和 laravel 中数组的更新数据

Axios在vue项目中的安装使用以及基本的请求方法