При покидании окна ввода текста id=autoSign вызывается функция, которая подтягивает данные ajax-ом, связанные с введенным текстом, на базе этих данных выполняется функция, в которой снова вызывается ajax, для получения еще одного набора данных.
$("#autoSign").blur(function() {
$.ajax({
url: "${createLink(controller: 'car', action: 'resolveModel')}",
type: 'Get',
data: {autoSign: $("#autoSign").val()},
success: function(data) {
for (var i = 1; i <= data.сount1; i++) {
for (var j=1; j<= data.count2; j++){
var a = rndrTireModel(data.id, 'steer', i, j, 'left');
("#result1").val(a);
a = rndrTireModel(data.id, 'steer', i, j, 'right');
("#result2").val(a);
a = rndrTireModel(data.id, 'lead', i, j, 'left');
("#result3").val(a);
a = rndrTireModel(data.id, 'lead', i, j, 'right');
("#result4").val(a);
}
}
}
});
function rndrTireModel(carId, shaft, shaftNum, wheel, side) {
var result;
$.ajax({
url: "${createLink(controller: 'tireModel', action: 'resolveTireModel')}",
type: 'Get',
data: {car: carId, shaft: shaft, shaftNum: shaftNum, wheel: wheel, side: side},
success: function(text) {
result = text;
}
});
alert (result);
return result;
}
});
При добавлении alert (result); данные появляются в итоге там где нужно, при отсутвии alert данные не появляются.
Подумываю, что это как то связано с тем, что когда выполняется второй ajax первый уже завершил свое выполнение.
Подскажите, как реализовать?
25.12.12 19:56: Перенесено модератором из 'Java' — Blazkowicz
Здравствуйте, Veroonya, Вы писали:
V>V>function rndrTireModel(carId, shaft, shaftNum, wheel, side) {
V> var result;
V> $.ajax({
V> url: "${createLink(controller: 'tireModel', action: 'resolveTireModel')}",
V> type: 'Get',
V> data: {car: carId, shaft: shaft, shaftNum: shaftNum, wheel: wheel, side: side},
V> success: function(text) {
V> result = text;
V> }
V> });
V> alert (result);
V> return result;
V>}
V> });
V>
AJAX запрос запускается асинхронно текущей функции.
Поэтому у вас сначала отрабатывает
return result;
а потом
result = text;
alert останавливает выполнение функции ожидая действия пользователя. В этом случае AJAX запрос успевает завершится. Но если сервер будет долго думать, то можно успеть закрыть alert() до получение результата. Это никак не связано с выполнением предыдущего запроса.
Можно решить через параметр async:
http://stackoverflow.com/questions/755885/how-do-i-make-jquery-wait-for-an-ajax-call-to-finish-before-it-returns
И ещё JavaScript это не Java. Тема будет пересена в соответствующий форум.