#jquery #ajax
#jquery #ajax
Вопрос:
Посмотрите мой код:
Я использую Jamal framekwork.
Event: {
getEvents: function(){
var events;
$.ajax({
type: "POST",
url: anchor("Events/getEvents"),
success: function(data) {
if(data){
events = data;
console.log(events);
}
}
});
console.log(events);
return events;
}
}
Первый вывод:
{"0":{"id":"1","title":"title","description":"comment"},"1":{"id":"2","title":"title2","description":"comment2"}}
Второй вывод:
Не определено
Если var events является глобальным, почему я не могу установить значение внутри функции ajax и получить значение после?
Джамал что-то нарушает?
Комментарии:
1. Вы уверены, что второй вызов сработал? Если вы не выполните свою функцию успеха,
events
она никогда не будет назначена.
Ответ №1:
Это потому, что переменная:
var events;
Инициализируется в функции обратного вызова — вызов ajax является асинхронным, если вы помещаете:
console.log(events);
сразу после того, как переменная вызова ajax не назначена (это будет somtime — но вы не знаете точно, когда) — вся логика должна быть в обратном вызове.
Также вы можете сделать вызов ajax синхронным, установив: async : false
тогда ваш код должен работать должным образом.
Ответ №2:
Это потому, что функция, которую вы передаете ajax(), является асинхронной. Таким образом, выполнение выполняется при нижнем вызове console.log() перед вызовом функции успеха. Функция успеха вызывается, когда сервер отвечает на ваш запрос AJAX.