Глобальные значения возвращаются к исходным значениям после AJAX (jQuery)

#javascript #jquery #ajax #global-variables

#javascript #jquery #ajax #глобальные переменные

Вопрос:

Я относительно новичок в jQuery, я пытаюсь обойти этот код, но постоянно терплю неудачу, проблема, с которой я сталкиваюсь, в том, что у меня есть массив gloval (role_permission), я могу использовать это в своем AJAX-запросе, я также могу вносить изменения в содержимое массива, но в тот момент, когда я выхожу, все глобальные значения возвращаются к исходным, почему ?!? Нужна помощь. Пожалуйста, посмотрите на следующий код,

 // Global Variable
var Role_Permission = {
    "Value1" : true;
    "Value2" : true;
    "Value3" : true;
}
  

Теперь у меня есть функция, которая выглядит следующим образом,

 function checkRoles(){
    requestData(
        "roleData",
        { roleName: "testUser"},
        function(result){
            Role_Permission["Value2"] = false;
            alert(Role_Permission["Value2"]);
        }
    });

    alert(Role_Permission["Value2"]);
}
  

Предупреждение вне AJAX возвращает значение Value2 как True, однако внутри оно возвращает значение FALSE, почему?!? Пожалуйста, помогите

Спасибо

Ответ №1:

Потому что AJAX-запрос выполняется асинхронно, именно поэтому вы даете ему обратный вызов, который будет вызван, как только это будет сделано. Все, что находится за пределами обратного вызова, будет выполнено немедленно, даже если запрос, который вы только что отправили, все еще выполняется. Вот почему нижнее оповещение по-прежнему имеет старое значение, но то, что находится внутри обратного вызова, — новое.

Комментарии:

1. Кто-то должен разработать искусственный интеллект для автоматического определения (ответа) такого рода вопросов…

2. Да, я знаю. Только что попробовал, но в данном случае автоматическое предложение не сработало.

3. Спасибо, действительно глупо с моей стороны не принимать во внимание асинхронный запуск. Проблема исправлена. Большое спасибо 🙂

Ответ №2:

ajax объяснил
(источник:fixingthesejquery.com )