【问题标题】:VueJS update data after ajax callajax调用后VueJS更新数据
【发布时间】:2019-03-20 14:14:33
【问题描述】:

我试图在我的网页上进行分页。所以它会在每一页被翻转时相应地过滤数据。每次成功的 ajax 调用后如何更新我的 Vue 实例的数据?每次发出 ajax 请求时都会回传正确的数据,但 Vue 数据没有更新。

product.php 中的代码(如下):

<script src="/vue.min.js"></script>
<script src="/i.js"></script>

<div class="content">
 <table class="hue">
  <thead>
    //table headings
  </thead>
  <tbody>
   <tr v-for="(value, key) in result">
     <td>{{value.productCode}}</td>
     <td>{{value.productName}}</td>
     //... etc
   </tr>
  </tbody>
 </table>
</div>

i.js 中的代码(如下):

function fetchData(p=null){
 var ajaxVue = new Vue({
  el: ".hue > tbody",
  data: {
    result: []
  },
  mounted: function(){
   var self = this;
   $.ajax({
    url:"/a.php",
    method:"GET",
    data:{
     page: p
    },
    dataType:"json",
    success:function(rs){
     console.log(rs.pd[14].code);
     self.result = rs.pd;
     $('#pagination > .pagination').html(rs.pgnt);
     //ajaxVue.$forceUpdate();

    },
    error:function(err){console.log(err);}
   });
  }
 });
}

$(document).ready(function(){
  fetchData();
});

注意:ajax成功函数中的console.log()是显示数据是否在变化,是否获取到正确的数据。

示例:

//there will be 15 data on each request, i just show one for example.
BM23901 //current page: 1
BM19023 //current page: 2
BM39020 //current page: 3

但是在我的product.php 界面上,显示的数据仍然是BM23901,而不是在每次成功的ajax 请求后更新自身。

我从 Vue 尝试了forceUpdate(),但实例仍未更新。

【问题讨论】:

    标签: php ajax vue.js


    【解决方案1】:

    我认为你应该改用 axios:

    try {
        const response = await axios({...});
        console.log(rs.pd[14].code);
        self.result = rs.pd;
    } catch (error) {
        console.log(error);
    }
    

    我认为这段代码可以完美运行。 但是如果你还想用ajax试试,那么我可能会建议你把你的成功函数改为箭头函数:

    $.ajax({
        ...
        success: (resp) => {
            result = resp.pd;
        },
        ...
    });
    

    请注意,我不必在箭头函数内使用self

    【讨论】:

    • 您的意思是将我当前的 fetchData() 中的全部/部分内容更改为上述代码?我过去没有使用任何 axios,不确定 axios 是否需要其他配置。你有任何我可以参考的 axios 文档吗? TIA
    • 这只是我的建议。如果您不想使用,则不必使用它。我认为您的问题只是范围有关,因此您只需将 success 函数更改为数组函数即可。
    • @boboltm 试试这个链接:github.com/axios/axios#example 它非常简单易用。您需要做的就是: 1. npm install axios 2. const axios = require('axios'); 3. 像 ajax 一样使用它。但是请记住两件事:它没有像ajax那样的成功和失败功能,而是.then().cacth()。并且不要使用then &amp; catchfunction。只需像上面那样使用 try...catch
    • 如何在没有 npm install 的情况下使用 axios(我的电脑中没有任何 nodejs 的东西,实际上我的项目不是使用 nodejs 构建的)?我尝试使用 CDN 方法包含 axios,它返回“require”未定义(按照文档中显示的示例)。对于第二个建议,如果不使用self.result 或this.result(返回空白,除非我将this 指向它们),但仍然发生与我之前所做的相同的事情。
    • 所以如果您使用箭头功能但它仍然不起作用? this.result = rs.pd 仍然不能在箭头函数中工作?
    猜你喜欢
    • 1970-01-01
    • 2017-01-18
    • 2017-03-06
    • 2012-02-06
    • 2017-11-27
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多