如何使用json中的变量在preload()函数中调用另一个json?

时间:2019-03-29 05:35:43

标签: javascript json api p5.js preload

我正在使用JavaScript中的p5js库。 我使用wrapAPI制作了一些自定义API,以从网络上获取帖子和评论。

第一个API返回带有帖子ID的最新帖子。第二个API返回第一个API调用中ID为ID的帖子评论。

执行此操作的好方法是什么?

我的想法是将size中的idvoxcategoria替换为:

preload()

,但是第二个idvox = datav.data.vox[1].idvox; 功能不起作用。如果我尝试console.log或使用帖子ID调用变量,则会返回空的loadJSON()Object值。

undefined

1 个答案:

答案 0 :(得分:1)

为了将来自一个loadJSON调用的数据用作第二个调用的参数,您需要考虑这些是异步调用。参见Loading-external-files:-AJAX, -XML, -JSON

您将在回调函数中卸载数据,而不是直接将变量设置为返回值:

  

回调

     

回调是一个函数,它将作为参数传递给另一个函数,并由另一个函数调用。回调函数在使用异步函数时很有用,因为它允许我们指定一些代码,以在第一个异步任务完成后执行。

     

当我们使用setTimeout,setInterval和addEventListener时,我们实际上已经使用了回调。例如,下面的“ doSomething”是一个回调函数:

function doSomething() {
  console.log("doing something!");
}

setTimeout(doSomething, 5000);
  

您将看到p5.js和jQuery中使用了回调,以告诉程序在接收到外部数据之后该怎么做。

function setup() {
  loadJSON("data.json", drawData);
}
  

loadJSON

     

loadJSON加载一个JSON文件并返回一个JavaScript对象。它带有两个参数,即文件的路径和回调函数。服务器返回JSON数据并进行解析后,将运行drawData并将结果作为变量“ data”自动传递。

function drawData(data) {
  // person 1 bubble
  fill(155, 30, 180, 180);
  ellipse(250, 200, data.person1.age * 5, data.person1.age * 5); // person1.age = 30
  fill(255);
  text(data.person1.name, 210, 200); // person1.name = Morgan

  // person 2 bubble
  fill(180, 180, 34, 180);
  ellipse(350, 200, data.person2.age * 5, data.person2.age * 5); // person2.age = 32
  fill(255);
  text(data.person2.name, 330, 200); // person2.name = Joss
}

出于您的目的,您将修改这样的代码以链接您的AJAX调用。在您的情况下,您将有一个函数进行第二次调用,并将其传递给对loadJSON的第一次调用。第二个调用还将传递一个回调函数,您将使用该回调函数卸载最终数据。