Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.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完成之前执行的代码_Javascript_Jquery - Fatal编程技术网

Javascript 在getJSON完成之前执行的代码

Javascript 在getJSON完成之前执行的代码,javascript,jquery,Javascript,Jquery,基本上。我正在尝试创建一个小的web应用程序,它允许人们在天气/能见度良好的情况下看到第n个最快的国际空间站通道。为了尝试并实现这一点,我调用OpenNotify API以获取给定Lat/Lon的最快传递,然后调用forecast.io API以获取给定位置的时间可见性。但是,在OpenNotify API返回的每个传递时间向forecast.io API发送多个API请求时,我遇到了一个问题,其中第二个请求在第一个请求之前返回,因此(我认为)两个结果是相同的 我尝试从$.getJSON移动到$

基本上。我正在尝试创建一个小的web应用程序,它允许人们在天气/能见度良好的情况下看到第n个最快的国际空间站通道。为了尝试并实现这一点,我调用OpenNotify API以获取给定Lat/Lon的最快传递,然后调用forecast.io API以获取给定位置的时间可见性。但是,在OpenNotify API返回的每个传递时间向forecast.io API发送多个API请求时,我遇到了一个问题,其中第二个请求在第一个请求之前返回,因此(我认为)两个结果是相同的

我尝试从$.getJSON移动到$.ajax,其中我指定了async=false(如代码中所示)。但这似乎解决不了任何问题。任何帮助都将不胜感激!(我在下面列出了网络请求的屏幕截图以及我从代码中得到的结果)

var checkISS=function(){
$.getJSON('http://api.open-notify.org/iss-pass.json?lat=“+latCont+”&lon=”+longCont+”&alt=20&n=2&callback=?”,函数(数据){
issResponse=数据[‘响应’];
issResponse.forEach(功能(项目){
riseTime=新日期(item.riseTime*1000).toISOString();
console.log(“RiseTime=“+RiseTime”);
riseTimeHour=上升时间子串(11,13);
console.log(“RiseTimeHour=“+RiseTimeHour”);
weatherRiseTime=riseTime.substring(0,riseTime.length-5);
$.ajax({
网址:'https://api.forecast.io/forecast/“+apiKey+”/“+latCont+”、“+longCont+”、“+weatherRiseTime+”?回调=?”,
数据类型:“json”,
数据:数据,
async:false,
成功:函数(数据){
$(“body”).append(riseTime+“time visibility be”+data.hourly.data[riseTimeHour].cloudCover+“
”); } }); }); }); }
您是否尝试关闭缓存?您是指浏览器端?我可以试试。但是,因为它们是两个不同的请求,所以这不重要,不是吗?我尝试禁用缓存,但是,唉,我们的变量都是全局变量:您应该重写
issResponse
->
var issResponse
riseTime
var riseTime
,等等……您正在循环中进行ajax调用,因此,第二次调用的响应可能在第一次调用之前…使其成为带有success/error函数的递归调用
var checkISS = function(){
    $.getJSON('http://api.open-notify.org/iss-pass.json?lat=' + latCont + '&lon=' + longCont + '&alt=20&n=2&callback=?', function(data) {
        issResponse = data['response'];
        issResponse.forEach(function(item){
            riseTime = new Date (item.risetime * 1000).toISOString();
            console.log("RiseTime = " + riseTime);
            riseTimeHour = riseTime.substring(11,13);
            console.log("RiseTimeHour = " + riseTimeHour);
            weatherRiseTime = riseTime.substring(0, riseTime.length - 5);
            $.ajax({ 
                url: 'https://api.forecast.io/forecast/' + apiKey + '/' + latCont + ',' + longCont + ',' + weatherRiseTime + '?callback=?', 
                dataType: 'json', 
                data: data, 
                async: false, 
                success: function(data){ 
                    $("body").append(riseTime + " time visibility be " + data.hourly.data[riseTimeHour].cloudCover + "<br>");
                } 
            });
        });
    });
}