Initializing Vue data with AJAX

后端 未结 3 2052
日久生厌
日久生厌 2021-02-01 13:39

I\'m trying to populate a Vue with data from the JsonResult of an AJAX query. My Vue receives the data just fine when I encode it from my View Model, but not when I

3条回答
  •  孤独总比滥情好
    2021-02-01 14:35

    I had same problem, fixed by Samuel De Backer's answer above.

    The problem is at ajax success callback function,

    if you use this.data, it is incorrect, because when 'this' reference the vue-app, you could use this.data, but here (ajax success callback function), this does not reference to vue-app, instead 'this' reference to whatever who called this function(ajax call).

    So you have to set var self = this before ajax, then pass into callback function (success call back)

    Here is my working code

     created () {
         this.initialize()
      },
    
    
     mounted () {
    
            this.getData()
     },
    
    
     methods: {
    
         getData()  {
    
    
    
    
                     var getUser_url = url + 'cfc/sw.cfc?method=getUser&returnformat=json&queryformat=struct';
    
                    console.log(getUser_url )
    
                /*
                    You can use a plethora of options for doing Ajax calls such as Axios, vue-resource or better yet the browser's built in fetch API in modern browsers. 
                    You can also use jQuery via $.ajax() API, which simply wraps the XHR object in a simple to use method call 
                    but it's not recommended to include the whole jQuery library for the sake of using one method.
    
    
                    http://updates.html5rocks.com/2015/03/introduction-to-fetch
                    The Fetch API provides a JavaScript interface for accessing and manipulating parts of the HTTP pipeline, such as requests and responses. 
                    It also provides a global fetch() method that provides an easy, logical way to fetch resources asynchronously across the network.
    
                */
    
    
                    //   **********  must use self = this ************** 
                    // this reference vue-app.  must pass it to self, then pass into callback function (success call back)
                    var self = this;  
    
    
                    fetch(getUser_url).then(function (response) {
                                    return response.json();
                            }).then(function (result) {
    
                                     console.log(result);  
    
                                     // must use self.user,  do not use this.user, 
                                     // because here, this's scope is just the function (result).   
                                     // we need this reference to vue-app, 
                                     self.user = result;  // [{}, {}, {}]  
    
    
    
        }); // fetch(){}
    
    
       console.log(this.user);
    
    
      }, 
    
    
    
    initialize () {}
    

提交回复
热议问题