На сервере (yii2, activerecord select) выполняется запрос данных по поступившему по поступившему списку ID. Результат возвращается как массив( ->asArray, что ничего не меняет) с данными о записях с такими ID, конвертированными в JSON.
При этом в строке
else result = JSON.parse(response);
Определяется переменная result и возвращается из функции. Однако, при распечатывании в консоль отображается как undefined (даже если убрать JSON.Parse). Если эту же строку заменить на alert(response), то данные отобразятся в алерте в JSON-виде. С чем связано и как фиксить?
var result;
$.ajax({
url: window.location.href,
type: "POST",
cache: true,
dataType: 'json',
data: {
ids: JSON.stringify(ids),
_csrf: token,
},
success: function (response) {
if(response == 0) {
alert("Ошибка #103. Обратитесь к нам по контактным данным.");
result = -1;
}
else result = JSON.parse(response);
},
error: (function (jqXHR, ex) {
if(jqXHR.statusCode != 200){
alert('Что-то пошло не так. Напишите нам об этой ошибке (#102) ' + jqXHR.responseText);
}
})
})
return result;
ajax- асинхронный процесс, вашreturn resultвыполняется раньше, чем вызовется коллбекsuccess... фиксить либо промисами, либо вызовом функции вsuccessв которую будут переданы данные пришедшие. – MedvedevDev Apr 13 '18 at 16:54if(response == 0) {бессмыслена приdataType: 'json',. – Apr 13 '18 at 16:56'' == 0 // true– MedvedevDev Apr 13 '18 at 16:57'0'все же может прийти и распарситься – MedvedevDev Apr 13 '18 at 17:00async: falsewith jqXHR ($.Deferred) is deprecated" – Apr 13 '18 at 17:10