xmlvue.jsaxiosxml2js

Parse XML from Axios response, pushing to Vue data array


In my Vue app, I get an XML file with Axios and use parseString to parse XML as JSON. I then need to pass the result to Vue data (this.events). My console.log shows the parsed XML as JSON, but I cannot push to Vue data inside this function.

var parseString = require('xml2js').parseString;

axios.get(`http://url.to/events.xml`)
  .then(response => {
    parseString(response.data, function (err, result) {
      console.log(result); // returns a json array
      this.events = result // nothing happens
    });        
  })
}

How do I store my JSON array to this.data in Vue?


Solution

  • Try not to use this inside parseString, maybe it's a scope issue, which means this isn't referring to the vue data object.

    Try this:

    axios.get('http://url.to/events.xml')
      .then(response => {
        var self = this; 
        parseString(response.data, function (err, result) {
          self.events = result
        });        
      })
    }