我正在使用JavaScript中的p5js库。 我使用wrapAPI制作了一些自定义API,以从网络上获取帖子和评论。
第一个API返回带有帖子ID的最新帖子。第二个API返回第一个API调用中ID为ID的帖子评论。
执行此操作的好方法是什么?
我的想法是将size
中的idvox
和categoria
替换为:
preload()
,但是第二个idvox = datav.data.vox[1].idvox;
功能不起作用。如果我尝试console.log或使用帖子ID调用变量,则会返回空的loadJSON()
或Object
值。
undefined
答案 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
的第一次调用。第二个调用还将传递一个回调函数,您将使用该回调函数卸载最终数据。