асинхронный запрос
Здравствуйте, подскажите пожалуйста есть код, работающий в синхронном режиме, всё было нормально пока этих запросов было мало, сейчас количество запросов выросло и время обработки запросов стало критичным, если просто перевожу 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 генерить какое-нибудь событие. |
Часовой пояс GMT +3, время: 19:18. |