Асинхронный Ajax Call Mixing Callbacks - PullRequest
0 голосов
/ 15 сентября 2018

Так что в принципе у меня функция ajax довольно стандартная.Например:

    function ajax_call(rest_req, url, success_callback, fail_callback) {

    // if (request_in_progress)
    //     return;

    // request_in_progress = true;
    var xhttp = new XMLHttpRequest;

    xhttp.onreadystatechange = function () {
        if (this.readyState == 4) {
            // request_in_progress = false;
            if (this.status == 200) {
                success_callback(this);
            }
            else {
                fail_callback(this);
            }
        }
    };

    xhttp.open(rest_req, url, true);
    xhttp.send();
    }

Когда я использую функцию ajax следующим образом:

(function() {
 function setup() {
   ajax_call("GET", "url1", function(xhttp) {
        response = JSON.parse(xhttp.responseText);
        if (response["error"] != 100)
            document.getElementById('url1-reading').innerHTML = '---';
        else
            document.getElementById('url1-reading').innerText = response["response"];
    },
        function() {} 
    );

    ajax_call("GET", "url2" , function(xhttp) {
        response = JSON.parse(xhttp.responseText);
        if (response["error"] != 100)
            document.getElementById('url2-reading').innerHTML = '---';
        else
            document.getElementById('url2-reading').innerText = response["response"];
    }, 
        function() {}
    );

    console.log('Refresh');

  }

   setInterval(setup, 1000);
  })();

Этот код ведет себя не так, как я ожидаю.Когда я запускаю этот код, бывают случаи, когда результаты, которые должны были перейти на url1 success_callback, попадают в url2 success_callback.

Иными словами, переменная response внутри url1 ajax_call - это то, что я ожидал показать как переменную ответа для url2.Так что, по сути, ajax_call, похоже, не знает, что такое success_callback, хотя я явно передаю его в качестве параметра.

Я пришел из C ++, так что это сложная концепция для понимания.Как мне сделать это правильно?Я надеюсь, что мой вопрос ясен.Пожалуйста, скажите мне, что не ясно, чтобы я мог уточнить.

1 Ответ

0 голосов
/ 15 сентября 2018

Как вы объявите, response - это глобальная переменная. Попробуйте изменить response = на let response =

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...