【问题标题】:Javascript .getJSON multiple URLsJavascript .getJSON 多个 URL
【发布时间】:2019-01-28 19:08:13
【问题描述】:

我在 Javascript 中有 WEbDataconnector,它从 .json 文件下载数据并加载表:

myConnector.getData = function(table, doneCallback) {

        $.getJSON("http://url/api/opls/number/tasks?apiKey", function(resp) {        
            var feat = resp.data,
                tableData = [];

            // Iterate over the JSON object
            var keys = Object.keys(feat);
            for (var i = 0, len = keys.length; i < len; i++) {
                tableData.push({
                    "taskId": feat[keys[i]].taskId,
                    "owner": feat[keys[i]].owner,
                    "description": feat[keys[i]].description,
                    "responsible": feat[keys[i]].responsible,                     

                });
            }

            table.appendRows(tableData);
            doneCallback();
        });

我的问题是我有多个 URL,具有不同的数字和 apikey。我需要将所有 URL 的数据合并到一个表中。 有人可以帮我吗?谢谢。

编辑:

如果我在 data.push() 方法中添加更多元素,它会以“null 不是对象”结尾,因为 JSON 中的某些对象是 null,

JSON 示例:

"1026533": {
        "taskId": 1026533,
        "opl": 6919,
        "owner": "name",
        "description": "text",
        "responsible": "name",  
        "taskStart": {
            "date": "2016-03-21 13:28:11.000000",
            "timezone_type": 3,
            "timezone": "Europe\/Prague"

但有时会有一个元素 taskStart 为 null:

"1026535": {
        "taskId": 1026535,
        "opl": 6919,
        "owner": "name",
        "description": "text",
        "responsible": "name",
        "taskStart": null,

如何检查并推送所有数据或为空?谢谢

【问题讨论】:

    标签: javascript arrays tableau-api getjson


    【解决方案1】:

    recursionnamed function expression 与URL 列表一起使用。

    myConnector.getData = function (table, doneCallback) {
        var urls = [ /* the urls */]
        if (urls.length == 0) return doneCallback();
        $.getJSON(urls.shift(), function callback(resp) {
            var feat = resp.data,
                tableData = [];
            // Iterate over the JSON object
            var keys = Object.keys(feat);
            for (var i = 0, len = keys.length; i < len; i++) {
                tableData.push({
                    "taskId": feat[keys[i]].taskId,
                    "owner": feat[keys[i]].owner,
                    "description": feat[keys[i]].description,
                    "responsible": feat[keys[i]].responsible,
    
                });
            }
            table.appendRows(tableData);
            var url = urls.shift();
            if (url) return $.getJSON(url, callback); // recursion happens here 
            doneCallback();
        });
    }
    

    【讨论】:

      【解决方案2】:
      Keep an array containing all the urls that you need to fetchs.
      
      urls = [
          'http://url/api/opls/number1/tasks?apiKey1',
          'http://url/api/opls/number2/tasks?apiKey2', 
          'http://url/api/opls/number3/tasks?apiKey3'
      ];
      
      Then iterate over the array and send an ajax request on each url.
      
      urls.forEach(function(url) {
        $.getJSON(url, function(resp) {        
          var feat = resp.data,
          let data = [];
      
          // Iterate over the JSON object
          var keys = Object.keys(feat);
          for (var i = 0, len = keys.length; i < len; i++) {
              data.push({
                  "taskId": feat[keys[i]].taskId,
                  "owner": feat[keys[i]].owner,
                  "description": feat[keys[i]].description,
                  "responsible": feat[keys[i]].responsible,                     
              });
          }
      
          table.appendRows(data);
          doneCallback();
        });
      });
      

      【讨论】:

        猜你喜欢
        • 2013-12-07
        • 2017-10-01
        • 2021-03-29
        • 1970-01-01
        • 1970-01-01
        • 2012-01-21
        • 2020-05-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多