Задать вопрос
GreysonKind
@GreysonKind

Как использовать переменную из функции в любом месте в JavaScript?

Подскажите как я могу использовать результат функции в любом месте скрипта, вне функции (return'ом не получается)

$(document).ready(function () {
  var xmlDoc = $.ajax({
    type: "GET",
    url: "http://www.cbr.ru/scripts/XML_daily.asp",
    dataType: "xml",
    success: function ( xml ) {
      var xmlParse = $(xml).find('Valute');
      console.log( xmlParse ); // <-------- работает
    }
  });

  console.log( xmlParse ); // <------------ не работает
});
  • Вопрос задан
  • 4277 просмотров
Подписаться 3 Оценить 1 комментарий
Решения вопроса 3
@KoulSlou
Я тут вижу 2 проблемы:

1) Переменная xmlParse должна быть объявлена вне функции-обработчика success (пример кода у g_s_e) В противном случае, она не видна за пределами этой функции.

2) xmlParse будет undefined до тех пор пока ajax запрос не выполнится - ведь никакого изначального значения вы переменной не задаете. Можно использовать флаг async=false, дабы дождаться завершения запроса (по умолчанию ajax асинхронен) Но я не знаю, подойдет ли это в вашем случае.
Ответ написан
GreysonKind
@GreysonKind Автор вопроса
Возможно кому-то понадобиться:
$(document).ready(function () {

  var xmlParse;
  var xmlDoc = $.ajax({
    type: "GET",
    async: false,
    url: "http://www.cbr.ru/scripts/XML_daily.asp",
    dataType: "xml",
    success: function (xml) {
      xmlParse = $(xml).find('Valute');
    }
  });

  console.log(xmlParse.text());

});


Или так, но это все же не совсем то, что нужно было:
$(document).ready(function () {

  xmlDoc().done(appendItem);

  function xmlDoc() {
    var dfd = new $.Deferred();

    $.ajax({
      type: "GET",
      url: "http://www.cbr.ru/scripts/XML_daily.asp",
      dataType: "xml",
      success: function (xml) {
        var xmlParse = $(xml).find('Valute');
        dfd.resolve(xmlParse);
      }
    });

    return dfd.promise();
  }

  function appendItem(xmlParse) {
    xmlParse.each(function () {
      $('#searchlist').append('<a href="javascript:void(0)" class="list-group-item">' +
        $(this).find('CharCode').text() + ' (' +
        $(this).find('Name').text() + ') => ' +
        $(this).find('Value').text() + '</a>');
    });
  }

});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 5
@seredaes
var xmlParse;
Объяви перед $(document).ready(...

Или такой вариант.
Смотри в сторону localStorage["xmlParse"] = 123;
Видна будет в любом месте! console.log(localStorage["xmlParse"]);
Хранится даже после закрытия браузера :)

Единственный момент! не работает в частном(приватном) режиме в Safari под MacOS
Ответ написан
Nukk
@Nukk
MeteorJS евангелист
var xmlParse = $(xml).find('Valute');
Переменная обьявленная с var является локальной в контексте данной функции. Соответственно область видимости ограничена функцией в которой она обьявлена(если нет вложенных функций, это уже другая тема). Вкратце - просто уберите var и оставьте так.
xmlParse = $(xml).find('Valute');
В таком случае она будет глобальной.
Ответ написан
@g_s_e
$(document).ready(function () {
var xmlParse;
var xmlDoc = $.ajax({
type: "GET",
url: "www.cbr.ru/scripts/XML_daily.asp",
dataType: "xml",
success: function ( xml ) {
xmlParse = $(xml).find('Valute');
console.log( xmlParse );
}
});

console.log( xmlParse );
});
Ответ написан
fabrykant
@fabrykant
а так?
$(document).ready(function () {
  var xmlDoc = $.ajax({
    type: "GET",
    url: "http://www.cbr.ru/scripts/XML_daily.asp",
    dataType: "xml",
    success: function ( xml ) {
      var xmlParse = $(xml).find('Valute');
      return xmlParse;
    }
  });

  console.log( xmlDoc); 
});
Ответ написан
@Stepanya
$(document).ready(function () {
  var xmlParse = null;
  var promise = $.ajax({
    type: "GET",
    url: "http://www.cbr.ru/scripts/XML_daily.asp",
    dataType: "xml"
  }).success(function ( xml ) {
      xmlParse = $(xml).find('Valute');
   });
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы