【问题标题】:vue.js json object array as datavue.js json 对象数组作为数据
【发布时间】:2017-09-05 13:27:27
【问题描述】:

大家好!

我目前正在学习使用vue.js 做事。不幸的是,我被困在自动取款机上。我想做的是向我的示例 API 发送一个请求,该 API 以一个简单的 json 格式对象响应。 我想将此对象作为我的组件中的数据 - 但无论出于何种原因,它似乎都没有这样做。

Ofc 我试图在 stackoverflow 上找到解决方案,但也许我只是盲人,或者这就像其他人编写的代码一样。我什至在 vue 官方网站上找到了this example,但他们正在做和我一样的事情......我猜?

顺便说一句。当我在单独的文件中运行fetchData() 函数时,它确实可以工作,并且我可以访问从我的 API 获得的数据。代码没有变化..只是没有vue。我现在真的很困惑,因为我不知道错误是什么。

代码:

var $persons = [];

在我的组件内部:

data: {

  persons: $persons,
  currentPerson: '',
  modal: false

},


created: function() {

  this.fetchData()

},


methods: {

  fetchData: function () {

    var ajax = new XMLHttpRequest()

    ajax.open('GET', 'http://api.unseen.ninja/data/index.php')
    ajax.onload = function() {
      $persons = JSON.parse(ajax.responseText)
      console.log($persons[0].fname)
    }
    ajax.send()

  }

},

[...]

链接到the complete code

【问题讨论】:

    标签: json ajax vuejs2


    【解决方案1】:

    首先,确保onload 回调实际上正在触发。如果 GET 请求导致错误,onload 将不会触发。 (在您的情况下,错误与 CORS 相关,请参阅 @Pradeepb 建议的 this post)。

    其次,您需要直接引用persons 数据属性,而不是您初始化persons 时使用的$persons 数组。

    看起来像这样(在您的 fetchData 方法中):

    var self = this;
    ajax.onload = function() {
      self.persons = JSON.parse(ajax.responseText)
      console.log($persons[0].fname)
    }
    

    【讨论】:

    • 我以前试过这样,但它不起作用。我仍然没有输出。我认为 ajax.onload 函数甚至不会触发。 (添加了一些consolte日志,这个函数里面的那个没有显示出来。)
    • 您确定ajax.responseText 是有效的JSON?
    • @AndreasGrafen 你确定上面的建议不起作用吗?检查此out。它工作正常。如果您发现它不起作用,那么您一定是在网络选项卡中遇到了一些错误。
    • 我确定它是有效的 json,是的。小提琴也不适合我。我看到的只是空白。 i.epvpimg.com/8Trmbab.png
    • 如果遇到上述错误,请使用this 解决方案。然后 JSFIDDLE 就可以工作了。
    猜你喜欢
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 2021-12-13
    相关资源
    最近更新 更多