【问题标题】:firefox console fails to define a varaibleFirefox 控制台无法定义变量
【发布时间】:2020-05-07 23:48:43
【问题描述】:

在我在 Firefox 控制台中执行该代码后,我收到一条错误消息,上面写着“ReferenceError: abc is not defined”。我该如何解决它以使其工作? 它看起来像在 IF 结束后,FOR 忘记了变量“abc”的值。该怎么办? 请帮忙

for (i = 0; i < 10; i++) {
  if (i == 0 || i == 5) {
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
      if (this.readyState == 4 && this.status == 200) {
        var str = this.responseText;
        var text = str.split('?id = "')[1];
        var abc = text.split('";')[0];
      }
    };
    xhttp.open("GET", "http://example.com", true);
    xhttp.send();
  }

  fetch("http://www.example.com/post.php", {
    "credentials": "include",
    "headers": {
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0",
      "Accept": "*/*",
      "Accept-Language": "en-US,en;q=0.5",
      "Content-Type": "application/x-www-form-urlencoded",
      "X-Requested-With": "XMLHttpRequest"
    },
    "referrer": "http://www.example.com/index.php",
    "body": "id=" + abc + "",
    "method": "POST",
    "mode": "cors"
  });
}

【问题讨论】:

  • abc 是匿名函数中的局部变量。
  • 你为什么同时使用XMLHttpRequestfetch()
  • 它也是异步运行的,所以即使你修复了变量的作用域,fetch()运行时也不会分配变量。您需要从回调函数中调用fetch()
  • 因为我不知道如何通过 fetch 获取 URL 响应的内容。所以我为此使用了 xmlhhtprquest。 :(
  • 每个使用fetch()的教程都展示了如何获取响应的内容。

标签: javascript firefox console xmlhttprequest fetch


【解决方案1】:

您无法在 XHR onreadystate 函数之外访问 abc。它是一个局部变量,也是异步赋值的。所以你需要从那里执行fetch() 调用。

所以你应该使用嵌套循环。一个循环执行两个GET 请求,然后在它的回调函数中执行5 个POST 请求。

您可以使用 Fetch 完成所有操作,而不是混合使用 XHR 和 Fetch。你应该使用encodeURIComponent(abc) 来确保它被正确编码。

for (let i = 0; i < 2; i++) {
  fetch('http://example.com', {
      method: "GET"
    })
    .then(response => response.text())
    .then(str => {
      let text = str.split('?id = "')[1];
      let abc = encodeURIComponent(text.split('";')[0]);
      for (let j = 0; j < 5; j++) {
        fetch("http://www.example.com/post.php", {
          "credentials": "include",
          "headers": {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0",
            "Accept": "*/*",
            "Accept-Language": "en-US,en;q=0.5",
            "Content-Type": "application/x-www-form-urlencoded",
            "X-Requested-With": "XMLHttpRequest"
          },
          "referrer": "http://www.example.com/index.php",
          "body": "id=" + abc,
          "method": "POST",
          "mode": "cors"
        });
      }
    });
}

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    相关资源
    最近更新 更多