Не объявляется глобальная переменная [дубликат]

266
25 октября 2017, 05:27

На данный вопрос уже ответили:

  • Как вернуть значение из события или из функции обратного вызова? Или хотя бы дождаться их окончания 3 ответа

Вот код:

var testval = 'test';
function getip(){
    $.ajax({
        type: "POST",
        url: "/php/utils.php",
        data: "id=getip",
        success: function(data) {
            if (data) {
                testval = data;
            } else {
                console.error('undefined');
            }
        }
    });
}
getip();
alert(testval);

Вместо того чтобы вывести реальный айпи выдаётся test. Если сделать просто переменную выдаётся undefined. Поясните, что я делаю не так? Научите делать правильно) Буду признателен)

Answer 1

У вас функция getip асинхронная. Это означает, что результат оной будет через какое-то время. В то же время, вызов alert(testval); последовательный. К этому моменту ваш ajax запрос ещё не был отправлен и в testval хранится значение по-умолчанию.

Можно, например, так:

function getip(callBack){
    $.ajax({
        type: "POST",
        url: "/php/utils.php",
        data: "id=getip",
        success: function(data) {
            if (data) {
                callBack(data);
            } else {
                callBack('undefined');
            }
        }
    });
}
getip((ip) => {
     // здесь у вас уже будет правильный ip
     alert(ip);
});
READ ALSO
Анимация animate.css

Анимация animate.css

Всем приветХочу сделать анимацию корзины с помощью файла animate

276
Slick slider изменить кол-во слайдов после инициализации

Slick slider изменить кол-во слайдов после инициализации

Как можно изменить количество отображаемых слайдов у slick slider, при изменении экранаНа текущей момент решением является - скрытие старого слайдера...

289
необходимо задать максимальную длину в 100 символов, в двух строчках по 50 используя inputTextarea

необходимо задать максимальную длину в 100 символов, в двух строчках по 50 используя inputTextarea

необходимо задать максимальную длину в 100 символов, в двух строчках по 50 используя inputTextareaПолучается сейчас оно печатает сколько угодно строчек,...

212
пульверизатор(распылитель) карандаша

пульверизатор(распылитель) карандаша

Нужно в paint добавить инструмент распылитель вот код карандаша как его переделать под распылитель помогите

264