账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vue+jquery。用$.ajax发送请求更新数据,数据更新了,但是页面没有变化
    30
    0

    问题描述

    vue+jquery。用$.ajax发送请求更新数据,数据更新了,但是页面没有变化

    相关代码

    data: {
        myData:[];
    }
    methods:{
        get:function(){
            $.ajax({
                url: "http://XXXX",
                type: "GET",
                data:{},
                success: function(res){
                // console.log(res[1]);
                his.myData = res[1];
                console.log(this.myData);
                },
            })
        }
    }
        
    <ul>
        <li class="text-left" v-for="(item, index) of myData">{{item}}</li>
    </ul>
    <p class="text-info" v-show="myData.length == 0">暂无数据...</p>
                    

    结果

    结果console.log(this.myData)已经更新;但是视图没有更新,仍旧显示暂无数据

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 珍贵旳、价值。 普通会员 1楼

      在 Vue 中,$.ajax 发送请求并更新数据后,页面上没有发生变化的原因可能是以下几个:

      1. 异步请求被阻塞:当 $.ajax 发送请求后,如果请求被阻塞(即没有被返回或错误),则页面上不会立即更新。这可能是因为在请求被阻塞期间,页面加载了其他的内容,导致页面上的数据不正确。

      解决这个问题的一种方法是使用 Promise。当 $.ajax 发送请求并返回数据后,可以使用 Promise 来处理结果。这样,当数据被更新时,页面上的数据也会更新。

      以下是一个使用 Promise 的示例:

      javascript $.ajax({ url: 'api/data', type: 'GET', success: function(response) { // 更新数据 // ... // 发送新的请求,获取数据 $.ajax({ url: 'api/data', type: 'GET', success: function(response) { // 更新数据 // ... // 发送新的请求,获取数据 $.ajax({ url: 'api/data', type: 'GET', success: function(response) { // 页面上的数据已经更新了 // ... } }); } }); } });

      在这个示例中,当 $.ajax 发送请求并返回数据后,我们使用 Promise 来处理结果。当数据被更新时,我们发送新的请求来获取新的数据。这样,当数据被更新时,页面上的数据也会更新。

      1. 更新的属性没有绑定到 Vue 的实例上:在 Vue 中,每个实例都有一个实例数据。当数据被更新时,Vue 会立即更新每个实例的数据。但是,如果数据没有被更新到 Vue 的实例上,Vue 会认为数据没有发生变化,所以页面上没有发生变化。

      解决这个问题的一种方法是使用 bindToOwner Hook。这个 Hook 可以将数据绑定到 Vue 的实例上,以便在数据发生变化时更新页面上的数据。

      以下是一个使用 bindToOwner Hook 的示例:

      javascript data() { return { data: { id: 1, name: 'John Doe' } }; }, methods: { updateData() { this.data.name = 'Jane Doe'; } }, mounted() { this.$data = { id: 1, name: 'John Doe' }; }, watch: { data() { // 数据已经更新到 Vue 的实例上 // ... } }

      在这个示例中,我们首先在数据组件中定义了一个数据对象,并在方法中定义了一个 updateData 方法。然后,我们使用 bindToOwner Hook 将数据绑定到 Vue 的实例上。最后,我们在数据组件的 mounted 生命周期钩子中,将数据对象的 id 属性绑定到 Vue 的实例上。这样,当数据发生变化时,Vue 会立即更新页面上的数据。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部