提问者:小点点

基于用户输入搜索JSON RESTful API


我正在处理一个个人项目,在这个项目中我要获取一个特定的JSON文件(RESTful API)。 然后,用户输入他们想要的任何东西,然后它将返回一个特定的值(比如价格)。

下面是我的代码:

// FETCH JSON

fetch('http://phisix-api4.appspot.com/stocks.json')
    .then(response => {
        return response.json()
    })
.then(data => {
        console.log(data)
        var data = JSON.parse(this.response)
    })
.catch(err => {
    // Do something for an error here
})

从标题为“Fetch JSON”的代码中,我成功地从web服务器获取了数据。 我可以用控制台记录数据。

下一个activity是用户在HTML输入框中键入名称。 我的代码应该将用户键入的内容存储到变量中。 我在这方面也很成功。 请看我的代码。

// USER INPUT NAME

function getUserTick() {
    var x = document.getElementById('stocktickerinput').value;
}

现在(这里)问题是,使用变量x,我试图通过以下代码搜索JSON响应:

var obj = data
for (var i = 0; i <= 243; i++){
  // look for the entry with a matching `code` value
  if (obj.stock[i].name == x){
    console.log('hey, i found it!')
  }
}

我找不到返回正确的值。 看来在搜索数据时循环的代码都是错误的。

在此查看我的小提琴:https://jsfiddle.net/c3x16d5s/1/

我不确定应该对JSON响应做什么,以及如何搜索用户输入。 有谁能帮忙吗?


共2个答案

匿名用户

通常,在脚本的较高位置启动变量是保证访问后续函数的可靠方法。 我做了一些假设,因为我实际上看不到对象的结构,也看不到x的值,尽管您的语法看起来是正确的。 检查看看这是否有效!

let x = document.getElementById('stocktickerinput').value;
let obj;

fetch('http://phisix-api4.appspot.com/stocks.json')
    .then(response => {
        return response.json()
    })
.then(data => {
        console.log(data)
        obj = JSON.parse(data)
    })
.catch(err => {
    // Do something for an error here
})

function getUserTick() {
    for (let i = 0; i <= 243; i++){
  // look for the entry with a matching `code` value
    if (obj.stock[i].name == x){
      console.log('hey, i found it!')
    }
  } 
}

getUserTick()

编辑:做了一些迭代-弄乱了obj变量,但这应该可以工作。 如果没有,告诉我!

匿名用户

您可以使用filter方法循环遍历您的数据并获取json数据的特定内容。

所以你可以键入this而不是for循环。

const result = obj.stock.filter(stock => stock.name == x)

if (result) {
  console.log("Found it")
}