Консоль firefox не может определить переменную - PullRequest
0 голосов
/ 22 января 2020

после того, как я извиняю этот код в консоли firefox, я получаю erorr, который говорит "ReferenceError: ab c не определен". Как я могу это исправить, чтобы это работало? похоже, что после того, как IF закончится, FOR забывает значение переменной "ab c". что делать? пожалуйста помогите

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"
  });
}

1 Ответ

0 голосов
/ 22 января 2020

Вы не можете получить доступ к abc вне функции XHR onreadystate. Это локальная переменная, и она также назначается асинхронно. Таким образом, вам нужно выполнить fetch() вызовы оттуда.

Поэтому вы должны использовать вложенные циклы. Один l oop выполняет два 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"
        });
      }
    });
}
...