2013-11-27 3 views
2

У меня есть следующий фрагмент кода в Javascript-Jquery:JQuery: переменная не инициализирована в обратном вызове?

var result = ""; 
$.ajax({ 
    type: 'POST', 
    url: 'update.php', 
    data: { 'val': $val } 
}) 
.done(function(data) { 
    alert(data); // shows right response 
    result = data; 
    alert(result); // shows right response 
}); 
alert(result); // shows nothing 

Даже если я инициализирован результат в обратном вызове, я ничего не получаю, когда я предупредит результат переменной (это все еще «»)? Почему это?

+1

.done is async, предупреждение о нижнем уровне сразу –

+0

Это должно быть, спасибо! Как я могу сделать это. Затем произойдет до последнего предупреждения? –

+0

Есть способ сделать вызов ajax для синхронизации, но почему? Внедрите все необходимые функции для результата внутри .done –

ответ

3

Это связано с тем, что вызов ajax выполняется асинхронно. Просто потому, что второе предупреждение после вызова ajax, вам все равно придется либо: написать метод обратного вызова для запуска при завершении вызова, либо b: выполнить синхронный вызов ajax. См. Документацию jquery ajax для свойства async и его описание.

1

Is is simple. Код alert(result) выполняется перед обратным вызовом done. Таким образом, переменная result пуста. Обратный вызов done вызывается асинхронно после вызова оповещения.

Надеюсь, это поможет.

1

Это еще потому, что режим AJAX теперь вы используете это Асинхронный ... У меня есть пример для вас, что это следующим образом:

var result = ""; 
$.ajax({ 
type: 'POST', 
url: 'update.php', 
data: { 'val': $val' } 
}).done(function(data) { 
    alert(1, data); // shows right response 
    result = data; 
    alert(2, result); //shows right response 
}); 
alert(3, result) // shows nothing 

, если вы хотите использовать синхронную ... смотреть на doc для переменной async Надеюсь, это вам полезно :)

Смежные вопросы