需要帮助访问JSON数组对象

时间:2022-08-26 11:54:56

Objective: This code collects an array JSONAPIS and passes the APIS into a $.each() loop. Then JSON data field are evaluated in if statements and used to calculate precip. How do I access the JSONAPIS from the obj. Main issue: obj.daily.data.length is undefined on the daily array member. The obj should contain one of the API calls and the JSON dataset to use. Instead it contains keyword like abort, always, promise which I am not familiar how to use. What would access the result JSON object property?

目标:此代码收集数组JSONAPIS并将APIS传递到$ .each()循环。然后在if语句中计算JSON数据字段并用于计算沉淀。如何从obj访问JSONAPIS。主要问题:每日数组成员上未定义obj.daily.data.length。 obj应该包含一个API调用和要使用的JSON数据集。相反,它包含像abort,always,promise这样的关键字,我不熟悉如何使用。什么会访问结果JSON对象属性?

var listAPIs = "";
var darkForecastAPI = [];
var result = [];
var JSONAPIS = [];

$.each(numDaysAPITimes, function(a, time) {
    var darkForecastAPI = /*"http://api.wunderground.com/api/" + currentAPIKey + "/history_" + time + "/q/" + state + "/" + city +".json?callback=?"; */
        "http://api.forecast.io/forecast/" + currentAPIKey + "/" + city + time + "?callback=?";
    //https://api.forecast.io/forecast/APIKEY/LATITUDE,LONGITUDE,TIME
    JSONAPIS.push($.getJSON(darkForecastAPI, {
        tags: "WxAPI[" + i + "]", //Is this tag the name of each JSON page? I tried to index it incase this is how to refer to the JSON formatted code from the APIs.
        tagmode: "any",
        format: "json"
    }));
});
$.when.apply($, JSONAPIS).done(function(result) { /*no log simply an array */
    var eachPrecipSum = 0.0;
    var totalPrecipSinceDate = 0.0;
    alert(result);

    $.each(result, function(d, obj) {
    console.log(obj);
        for (var c = 0; c <= obj.daily.data.length - 1; c++) {
            if (obj.daily.data[c].precipIntensity >= 0.0000 && obj.daily.data[c].precipType == "rain") /*Number(result.history.dailysummary.precipm, result.history.dailysummary.rain*/ {
                eachPrecipSum = result[d].daily.data[c].precipIntensity;
                totalPrecipSinceDate = eachPrecipSum + totalPrecipSinceDate; ///Write mean precip
                alert(Math.round(eachPrecipSum * 10000) / 10000);
                $("body").append("p").text("There has been as least a total of " + Math.round(totalPrecipSinceDate * 10000) / 10000 + " inches per hour of rain at the location in the last " + userDataDatePick + " days")

            } else if (obj.daily.data[c].precipIntensity >= 0.0000 && obj.daily.data[c].precipType != "rain") {
                alert("There is was no rain on ____" /*+ result.history.dailysummary.mon + "/" + result.history.dailysummary.mday + "/" + result.history.dailysummary.year*/ );
            }
        }
    });
});
numDaysAPITimes = 0;

}

1 个解决方案

#1


2  

$.when doesn't take array as input

$ .when不接受数组作为输入

Since you are passing an array that isn't itself a promise it is likely firing immediately and therefore ahead of all the ajax calls completing

由于您传递的数组本身不是一个承诺,因此可能会立即触发,因此在所有ajax调用完成之前

Need to change to

需要改为

$.when.apply(null, JSONAPIS).done...

#1


2  

$.when doesn't take array as input

$ .when不接受数组作为输入

Since you are passing an array that isn't itself a promise it is likely firing immediately and therefore ahead of all the ajax calls completing

由于您传递的数组本身不是一个承诺,因此可能会立即触发,因此在所有ajax调用完成之前

Need to change to

需要改为

$.when.apply(null, JSONAPIS).done...