#javascript #jquery
#javascript #jquery
Вопрос:
Может ли кто-нибудь помочь мне, в чем я ошибаюсь
function separateerror()
{
var jqxhr = $.get("/errormsg.txt", function(data) {
line = data;
array = line.split(',');
getmsg=array[0];
})
return getmsg;
}
мне нужно вернуть «getmsg» в другую функцию, но она не работает, где, как будто я добавляю предупреждение между ними
function separateerror()
{
var jqxhr = $.get("/errormsg.txt", function(data) {
line = data;
array = line.split(',');
getmsg=array[0];
})
//alert(getmsg)
return getmsg;
}
значение возвращает, что неправильно я делаю в коде?
Комментарии:
1. как / где вы вызываете эту функцию
separateerror
??
Ответ №1:
$.get
это асинхронный вызов, и происходит то, что если вы добавляете промежуточное оповещение, вы даете время для завершения асинхронного вызова, а затем ваше значение уже установлено к моменту завершения separateerror
функции. В противном случае separateerror
функция возвращается до завершения $.get
вызова, и тогда ваше getmsg
значение, вероятно, по-прежнему равно нулю.
При работе с асинхронными вызовами вы не должны использовать эту простую модель вызова функций и ожидать их значений в ответ, вы должны использовать функции обратного вызова, чтобы выполнить это правильно.
РЕДАКТИРОВАТЬ: кроме того, вы должны обработать $.get
обратный вызов ошибки, если что-то произойдет, и вы не сможете загрузить txt
файл.
function separateerror()
{
var jqxhr = $.get("/errormsg.txt", function(data) {
line = data;
array = line.split(',');
getmsg=array[0];
dosomething(getmsg);
})
.error(function() { alert("error"); });
}
function dosomething(msg) { ... }
Ответ №2:
Вставьте это в начало вашего скрипта. Это / должно / исправить.
$.ajaxSetup({
async: false
});
Комментарии:
1. Что, если ему нужно больше вызовов ajax — было бы лучше, если бы они были асинхронными.
2. Это будет работать, но это не исправление, поскольку ожидается асинхронное поведение. Это хороший хак, если вам не нужны какие-либо асинхронные вызовы вообще сейчас и в будущем. Если вам когда-нибудь понадобится выполнять асинхронные вызовы в будущем, приготовьтесь к некоторым головным болям
3. Верно. Думаю, именно поэтому у вас больше репутации, чем у меня. Я никогда не думал о том, что произойдет после того, как это было вызвано. Я просто подумал о быстром решении проблемы. Мне есть чему поучиться, спасибо, ребята.