1

Как переменной "value" присвоить полученное значение, которое пришло в качестве ответа от веб-сервера?

    var value;
    ...
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4 && xhr.status == 200) {
            //alert(xhr.responseText);
            var jsonResponse = JSON.parse(xhr.responseText);
            value = jsonResponse.id;
            //return value;
        }
        else {
          console.error(xhr.statusText);
        }
//return value;
    };
    ...
  • Присваивается оно легко, но неизвестно когда. – Sergey Gornostaev Oct 04 '16 at 08:27
  • 1
    если я правильно понял, то вы пытаетесь использовать value прежде чем произойдет xhr.onreadystatechange, скорее всего вам необходимо в теле xhr.onreadystatechange вызвать функцию которая будет содержать реализацию логики и передать в нее value . Либо уточните вопрос. – Vyacheslav Danshin Oct 04 '16 at 08:31
  • @papiroca, первоначально я value не использую, а хочу полученное значение передать следующим шагом в функцию: chrome.runtime.sendMessage({data: value}); – Forkildney65 Oct 04 '16 at 08:38

1 Answers1

3

Вы и так присваиваете параметр из ответа переменной value . Но судя по всему у вас вопрос совсем в другом. Вы делаете асинхронный запрос, полностью это у вас выглядит скорее всего примерно так:

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
    if (xhr.readyState == 4 && xhr.status == 200) {
        //alert(xhr.responseText);
        var jsonResponse = JSON.parse(xhr.responseText);
        value = jsonResponse.id;
    }
    else {
      console.error(xhr.statusText);
    }
};
xhr.open("GET",url, true);
xhr.send();

запрос отправляется в момент xhr.send(), а функция xhr.onreadystatechange отработает, когда придет ответ. Когда это произойдет по большому счету не известно. Что бы использовать данные из ответа, вам нужно в callback функции вызвать действие которое должно использовать переменную value, например так:

var value;
function useValue() {
   // Делаете то что вам нужно
}
xhr.onreadystatechange = function() {
    if (xhr.readyState == 4 && xhr.status == 200) {
        //alert(xhr.responseText);
        var jsonResponse = JSON.parse(xhr.responseText);
        value = jsonResponse.id;
        useValue();
    }
    else {
      console.error(xhr.statusText);
    }
};
  • До меня уже дошло. Всем спасибо за помощь! – Forkildney65 Oct 04 '16 at 08:50
  • и лучше быть аккуратнее с зоной видимости и передавать useValue(value) без var value; – Vyacheslav Danshin Oct 04 '16 at 08:53
  • да, естественно, но переменная value может использоваться у автора и в других местах. – Alexey Prokopenko Oct 04 '16 at 08:56
  • 1
    Как думаете, сколько еще раз вы сможете ответить на этот вопрос, прежде чем сорветесь? :) – Pavel Mayorov Oct 05 '16 at 07:05