dogmator
@dogmator

Как получить JSON и поместить его во внешнюю переменную?

var JSONexternal = getJSON('/php/vesettingsforclient.php', function(response) {
    return JSON.parse(response);
});
console.log(JSONexternal); // undefined

function getJSON(url, callback) {
    var xhr = new getXmlHttpInstance();
    xhr.open("GET", url, true);
    xhr.send();
    xhr.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            if (typeof callback === 'function') {
                callback.call(this, this.responseText); // как отсюда вытащить ответ во внешний скрипт?
            }
        }
    };
}
  • Вопрос задан
  • 341 просмотр
Пригласить эксперта
Ответы на вопрос 2
Потому что функция getJSON ничего и не возвращает, вы получаете значение через callback, чтобы ваш код работал, нужно сделать так:
var JSONexternal = getJSON('/php/vesettingsforclient.php', function(response) {

   // response доступен только тут, эта функция вызывется асинхронно 
    console.log( JSON.parse(response));
});

function getJSON(url, callback) {
    var xhr = new getXmlHttpInstance();
    xhr.open("GET", url, true);
    xhr.send();
    xhr.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            if (typeof callback === 'function') {
                callback.call(this, this.responseText); // как отсюда вытащить ответ во внешний скрипт?
            }
        }
    };
}
Ответ написан
Комментировать
jamesgoodwin
@jamesgoodwin
Молодой разработчик
Возможно ли, что ваш callback ожидает один "response", а вы ему отдаете два параметра? Попробуйте как-то так:
callback.call(this.responseText);

UPDATE:
Рекомендую залогировать, чтобы выяснить в чем причина. Так на самом деле быстрее и продуктивнее. Кода ведь не много. Интересно что возвращается в ответе на запрос и что передается в ваш callback.

P.S. У вас this.readyState, this.status и this.responseText вообще работают? Обычно xhr.readyState, xhr.status и xhr.responseText.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы