【问题标题】:XMLhttprequest returning null only when in loopXMLhttprequest 仅在循环中返回 null
【发布时间】:2021-06-19 22:27:34
【问题描述】:

我正在编写此代码以从网站获取数据并将数据放入表格中。 XMLhttprequest 有效,我取回数据并可以存储它。但是,一旦我添加了 x=1999 的这个 for 循环,响应就为空。我知道我没有将“x”值添加到每个 xml 请求中进行迭代,因为我只是想让它首先在第一次迭代中工作。

(function () {
  // Create the connector object
  var myConnector = tableau.makeConnector();

  // Define the schema
  myConnector.getSchema = function (schemaCallback) {
    var cols = [
      {
        id: "Currency",
        dataType: tableau.dataTypeEnum.string,
      },
      {
        id: "Price",
        alias: "Price",
        dataType: tableau.dataTypeEnum.float,
      },
      {
        id: "Year",
        alias: "Year",
        dataType: tableau.dataTypeEnum.float,
      },
      {
        id: "Base",
        alias: "Base",
        dataType: tableau.dataTypeEnum.string,
      },
    ];

    var tableSchema = {
      id: "EXratesFeed",
      alias: "Exchange Rates latest feed",
      columns: cols,
    };

    schemaCallback([tableSchema]);
  };

  // Download the data
  myConnector.getData = function (table, doneCallback) {
    //$.getJSON("https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/4.5_week.geojson", function(resp) {

    tableData = [];
    //loop through all dates
    //var x = 1999;
    //for (var x = 1999; x<2022; x++) {

    var requestURL = "https://api.exchangerate.host/latest";
    var request = new XMLHttpRequest();
    request.open("GET", requestURL);
    request.responseType = "json";
    request.send();

    request.onload = function (resp) {
      var response = request.response;
      console.log(response);

      var feat = response.rates;

      //var year = x;

      // Iterate over the JSsON object
      var count = Object.keys(feat).length;
      for (var i = 0, len = count; i < len; i++) {
        var currencyAbr = Object.keys(feat)[i];
        var currencyPrice = Object.values(feat)[i];
        tableData.push({
          Currency: currencyAbr,
          Price: currencyPrice,
          Base: response.base,
          //  "Year": x,
          //"mag": feat[i].properties.mag,
          //"title": feat[i].properties.title,
          //"location": feat[i].geometry
        });
      }
    };
    table.appendRows(tableData);

    doneCallback();
    //};
  };

  tableau.registerConnector(myConnector);

  // Create event listeners for when the user submits the form
  $(document).ready(function () {
    $("#submitButton").click(function () {
      tableau.connectionName = "Exchange rate feed";
      tableau.submit();
    });
  });
})();

【问题讨论】:

标签: javascript


【解决方案1】:

对您的请求使用 let 而不是 var ,它将被限制在块中:

 for (var x = 1999; x<2022; x++) {
 ....
 let request = new XMLHttpRequest();
 ....
 }

【讨论】:

    猜你喜欢
    • 2011-02-06
    • 2021-08-06
    • 1970-01-01
    • 2016-11-30
    • 2012-03-23
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多