Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何基于第一个getJSON的结果一个接一个地运行getJSON_Javascript_Jquery_Asynchronous - Fatal编程技术网

Javascript 如何基于第一个getJSON的结果一个接一个地运行getJSON

Javascript 如何基于第一个getJSON的结果一个接一个地运行getJSON,javascript,jquery,asynchronous,Javascript,Jquery,Asynchronous,在我的应用程序中,我试图从两个不同的来源收集数据。因此,首先它必须将每个循环到一个内部JSON文件中,看看是否找到了数据,如果没有,它必须请求另一个$.getjson()从外部源获取数据 因此,第二个$.getjson()依赖于第一个,如果数据已经在第一个中找到,则有时不需要运行 首先$.getjson()调用: $.getJSON(InternalURL, function (data) { $.each(data.Source, function (index, value) {

在我的应用程序中,我试图从两个不同的来源收集数据。因此,首先它必须将每个循环到一个内部JSON文件中,看看是否找到了数据,如果没有,它必须请求另一个$.getjson()从外部源获取数据

因此,第二个
$.getjson()
依赖于第一个,如果数据已经在第一个中找到,则有时不需要运行

首先
$.getjson()
调用:

$.getJSON(InternalURL, function (data) {
     $.each(data.Source, function (index, value) {
           if(artist.indexOf(value.keyword) > -1){
                 image = value.image;
                 $(".bg").css("background-image", "url(" + image + ")");
           }
     });

 });
$.getJSON(ExternalURL, function (data) {
    image = data.artist.image;
    (".bg").css("background-image", "url(" + image + ")");
});
Second
$.getjson()
调用:

$.getJSON(InternalURL, function (data) {
     $.each(data.Source, function (index, value) {
           if(artist.indexOf(value.keyword) > -1){
                 image = value.image;
                 $(".bg").css("background-image", "url(" + image + ")");
           }
     });

 });
$.getJSON(ExternalURL, function (data) {
    image = data.artist.image;
    (".bg").css("background-image", "url(" + image + ")");
});
另一个考虑因素是这个过程的时间安排。当然,它必须尽可能快地完成,这样在界面上就不会被注意到

更新 基于@Tiny Giant提供的答案使用Async/Await的示例 目前,这段代码在JSFIDLE上运行,但在实际应用中,虽然它运行良好,但它给出了一个控制台错误“Uncaught(in promise),其中包含一个方法对象,例如,
始终
中止
失败
,等等。你知道为什么会出现这个错误吗

您可以使用(最初在中定义)。有关当前支持的信息,请参阅

这是通过暂停当前执行上下文并在
getJSON
调用开始后将其从堆栈中删除来实现的。一旦
$.getJSON
调用返回,暂停的执行上下文将被添加回堆栈中,然后在处理完堆栈中前面的项后,执行将继续

(异步()=>{
const post=await$.getJSON('https://jsonplaceholder.typicode.com/posts/1');
const comments=await$.getJSON('https://jsonplaceholder.typicode.com/comments');
post.comments=comments.filter(e=>e.postId==post.id);
控制台日志(post);
})();
您可以使用(最初在中定义)。有关当前支持的信息,请参阅

这是通过暂停当前执行上下文并在
getJSON
调用开始后将其从堆栈中删除来实现的。一旦
$.getJSON
调用返回,暂停的执行上下文将被添加回堆栈中,然后在处理完堆栈中前面的项后,执行将继续

(异步()=>{
const post=await$.getJSON('https://jsonplaceholder.typicode.com/posts/1');
const comments=await$.getJSON('https://jsonplaceholder.typicode.com/comments');
post.comments=comments.filter(e=>e.postId==post.id);
控制台日志(post);
})();


你应该使用承诺。甚至
等待
。只需使用回调函数@user3739842谢谢你的评论。提供的链接使用ajax回调。即使ajax和getjson是相同的,但我只能使用getjson,而且在我测试它时,回调似乎在主体代码完成之前运行。。。但是,如果我错了,最好您提供一个示例代码。@ideaboxer所说的wait是指使用
$.when().done()
?!我试过了,我把第一个getjson放在
when()
中,如果第二个
getjson
是必需的,我在
done()
部分使用if语句来控制它。但是我注意到它甚至在
when()
完成之前就运行了
done()
部分。如果我做错了,你喜欢看,我可以更新代码。你应该使用承诺。或者甚至
等待
。只需使用回调函数@user3739842谢谢你的评论。提供的链接使用ajax回调。即使ajax和getjson是相同的,但我只能使用getjson,而且在我测试它时,回调似乎在主体代码完成之前运行。。。但是,如果我错了,最好您提供一个示例代码。@ideaboxer所说的wait是指使用
$.when().done()
?!我试过了,我把第一个getjson放在
when()
中,如果第二个
getjson
是必需的,我在
done()
部分使用if语句来控制它。但是我注意到它甚至在
when()
完成之前就运行了
done()
部分。如果我做错了,你喜欢看,我可以更新代码。谢谢你的帖子。它似乎与我正在寻找的内容非常接近,但我无法理解是哪一部分检查值以决定是否执行第二个getjson。例如,如果最初存在
var image=“”
,如果第一个getjson找到正确的数据,它将更改
图像
的值,如果第一个getjson在
图像
的值没有更改的情况下完成,那么它将执行第二个getjson请求。你能用我能理解的方式编辑代码吗?Thanks@DannyBoy我已经更新了我的答案,以包括一个应用于您问题中提供的特定示例的概念示例。谢谢您的回答。它起作用了。然而,在我选择它作为答案之前,你能检查一下我文章的更新部分,让我知道为什么控制台错误会出现吗?谢谢。我想它不见了在它的末尾。但是我不知道我必须在
.catch()
中添加什么。请给我一个复制错误的示例链接,我来看看。谢谢你的帖子。它似乎与我正在寻找的内容非常接近,但我无法理解是哪一部分检查值以决定是否执行第二个getjson。例如,如果最初存在
var image=“”
,如果第一个getjson找到正确的数据,它将更改
图像
的值,如果第一个getjson在
图像
的值没有更改的情况下完成,那么它将执行第二个getjson请求。你能用我能理解的方式编辑代码吗?Thanks@DannyBoy我已经更新了我的答案,以包括一个应用于您问题中提供的特定示例的概念示例。谢谢您的回答。信息技术