Я пытаюсь сделать последовательные асинхронные вызовы ajax, чтобы нарисовать пользовательские графики в таблицу HTML через jQuery.Каждый ответ возвращает сериализованный набор данных JSON, содержащий две таблицы: одна из запланированных событий, а другая содержит информацию о пользователе.
Проблема, с которой я сталкиваюсь, заключается в том, что пользовательская информация, похоже, перепутана с пользовательскими событиями.То есть иногда пользователь onfo не меняется для разных ответов, поэтому запланированные события привязываются к неверному пользователю.Если я установлю для свойства AJAX async значение false, все будет хорошо.
Весь смысл в том, чтобы отображать расписания по одному при возврате данных, а не останавливать страницу до тех пор, пока не будут возвращены все данные.
Есть ли способ гарантировать, что первый вызов JAX завершится до того, как будет выполнен последующий вызов?
(Возможно, мое понимание установки асинхронного на ложное неверно. Не значит ли это, что все данные собраныдо выполнения кода продолжается?)
Вот мой текущий подход:
// When page loads
$(document).ready(function () {
// Get date range
debugger;
//GetStartDate(), GetEndDate() populates date range
//PopulateParams() does that for remaining parameters
$.when(GetStartDate(), GetEndDate())
.then(function () {
PopulateParams();
GetUserSchedule();
})
.fail(function () {
failureAlertMsg();
})
});
// Returns schedule for each person listed in between selected start and end dates
function GetUserSchedule() {
for (var i = 0; i < arrRequests.length; i++) {
$.when(
// Ajax call to web method, passing in string
$.ajax({
type: "POST",
url: URL/default.aspx/GetSchedules",
data: arrRequests[i], // example data: {"UserId":"6115","startDate":"\"7/1/2011\"","endDate":"\"7/31/2011\MoreVals: Vals} contentType: "application/json",
dataType: "json",
success: SuccessFunction,
error: function (d) { alert('Failed' + d.responseText + '\nPlease refresh page to try again or contact administrator'); }
})
)
.then(function () {
}
);
}
}
// On successful completion of call to web method, paint schedules into HTML table for each user
function SuccessFunction(data) {
if (data != null && data.d != null && data.d.Temp != null) {
// Calls a bunch of functions to paint schedule onto HTML table
// Data contains two tables: one contains user info and the other contains rows of info for each event for user
// at times, the user info is not the correct user or the events are not correct for user
}