#jquery
#jquery
Вопрос:
Почему это не работает?
var myData;
function getData()
{
$.ajax(
{
url: dataURL,
success: function(data)
{
myData = data;
}
}
);
}
getData();
console.log(myData);
Я правильно определяю область действия переменной, но я не могу использовать данные вне функции..
Комментарии:
1. Может кто-нибудь, пожалуйста, отредактировать свой ответ, чтобы использовать «async: false», потому что это было решение
2. Я предлагаю вам не использовать
async: false
. Использование этого приведет к блокировке браузера до завершения вызова AJAX. Лучше всего позволить ему работать в фоновом режиме и запустить обратный вызов, когда он будет готов.3. Я понимаю, что это делает, и для данного случая это правильное решение. Я продолжу и опубликую ответ, если вы не хотите опубликовать его и получить баллы.
4. Вы можете продолжить и ответить на свой собственный вопрос. У меня достаточно очков 🙂
Ответ №1:
AJAX является асинхронным. Он выполняется в фоновом режиме во время выполнения вашего кода. Итак, когда вы вызываете console.log(myData);
, вызов AJAX еще не завершен, поэтому переменная не установлена.
Для обработки данных следует использовать функцию обратного вызова, например:
function getData(){
$.ajax({
url: dataURL,
success: function(data){
console.log(data);
}
});
}
getData();
Ответ №2:
ajax работает асинхронно (вы можете сделать его синхронным, но обычно это не то, что вы хотите). Это означает, что заданный вами успешный обратный вызов запускается только после получения ответа от сервера. Поместите инструкцию log в успешный обратный вызов.
Ответ №3:
Использовать async: false
var myData;
function getData()
{
$.ajax(
{
url: dataURL,
async: false,
success: function(data)
{
myData = data;
}
}
);
}
getData();
console.log(myData);