асинхронный запрос
Здравствуйте, подскажите пожалуйста есть код, работающий в синхронном режиме, всё было нормально пока этих запросов было мало, сейчас количество запросов выросло и время обработки запросов стало критичным, если просто перевожу ajax в синхронный режим работы (async убираю, либо true), то запрос не присваивает переменной arr ответ от сервера и возвращает null, как сделать выполнение этого запроса асинхронным?
GetAgentFio: function (clientGuid) {
if (clientGuid === undefined || clientGuid === null)
return '<Нет данных>';
var param = {
resource: "Clients/GetClient",
method: "GET",
parameters: { id: clientGuid }
};
var agent = Ajax2.executeAjaxRequestReturnData(param);
return agent !== undefined && agent !== null && agent.length !== 0 ? agent[0].Fio : '<Нет данных>';
}
executeAjaxRequestReturnData: function (data) {
var arr = null;
console.log("Параметры запроса к API " + data.resource + ":");
console.log(data);
$.ajax({
async: false,
type: "POST",
url: "/api/proxy",
dataType: "json",
contentType: "application/json",
data: JSON.stringify(data),
success: function (response) {
console.log("Ответ от API " + data.resource + ":");
console.log(response);
arr = response;
},
error: function (status) {
alert("Ошибка при получении данных при запросе к " + data.resource + ":" + status.responseText);
}
});
return arr;
}
|
Неужели нет никаких вариантов?
|
Цитата:
|
AlexTrader,
В асинхронном режиме ваша функция executeAjaxRequestReturnData вернет null, т.к. return arr; исполнится, не дожидаясь success |
Цитата:
|
Цитата:
executeAjaxRequest: function (data, callback) {
console.log("Параметры запроса к API " + data.resource + ":");
console.log(data);
$.ajax({
type: "POST",
url: "/api/proxy",
dataType: "json",
contentType: "application/json",
data: JSON.stringify(data),
success: function (response) {
console.log("Ответ от API " + data.resource + ":");
console.log(response);
callback.success(response);
},
error: function (status) {
callback = [];
alert("Ошибка при получении данных при запросе к " + data.resource + ":" + status.responseText);
}
});
}
|
Как с callback достать данные и записать в переменную agent?
|
AlexTrader,
Вам для чего нужен возвращаемый результат? Если для заполнения каких-то полей, то делать это в разделе success. Если для чего-либо другого - то в success генерить какое-то событие, и результат смотреть в обработчике (arr можно сделать глобальной) |
Цитата:
|
AlexTrader,
Цитата:
Никакая функция ничего вам не вернет. arr можно сделать глобальной - чтобы она была видна везде - и присваивать значение в success. Но при этом неизвестно, когда изменилось значение arr. Для того, чтобы определить, когда можно посмотреть новое значение arr, нужно в success генерить какое-нибудь событие. |
Цитата:
|
например можно alert вызвать в callback, но что делать если мне нужны данные в переменную получить?
|
Цитата:
Присвой ей значение в том калбеке. |
columns: [
{ field: "AgentFio", title: "Ответственный", width: 80, template "#=Tools.GetAgentFio(AgentId)#" }]
|
Вот для чего
|
Это один из столбцов моего грида
|
Мне нужно на сервере запросить ФИО по заданному Guid
|
Цитата:
|
Цитата:
Что это за грид такой? Причем тут какой-то массив? С чего ты решил, что поменяв значение некой переменной твой грид поменяется? |
Цитата:
|
Нельзя ли по теме вопрос обсудить?
|
Цитата:
Как мне обновить данные в kendoGrid при использовании аджакс-запроса... |
| Часовой пояс GMT +3, время: 16:24. |