У меня есть функция javascript, которая делает JSON-вызов веб-службы с использованием jQuery.В функции успеха мне нужно оценить ответ JSON и при необходимости сделать другой вызов другого метода в том же веб-сервисе.
Вот как я это делаю:
function firstAjaxCall(aid, tid) {
$.ajax({
type: "POST",
contentType: "application/json;charset=utf-8",
url: "/webservices/Webservice.asmx/Method1",
data: "{ auctionId: '" + aid + "'}",
dataType: "json",
success: function (response) {
var respData = response.d;
//do some stuff
if (respData.HasEnded == true) {
clearInterval(tid);
var end = false;
end = endFunction(aid);
if (end) {
// do some other stuff
}
}
},
failure: function (errorMsg) { alert(errorMsg.toString()); }
});
}
иendFunction, которая вызывается из функции успеха ajax:
function endFunction(aid) {
var hasEnded = false;
$.ajax({
type: "POST",
contentType: "application/json;charset=utf-8",
url: "/webservices/Webservice.asmx/Method2",
data: "{ auctionId: '" + aid + "'}",
dataType: "json",
success: function (callbackData) {
var endRespData = callbackData.d;
hasEnded = endRespData.Success;
alert(hasEnded.toString());
},
failure: function(XMLHttpRequest, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
}
});
return hasEnded;
}
Вот странные вещи.Аякс-вызов сделан правильно.Код на сервере работает в соответствии с планом.Тем не менее, если я пытаюсь установить точку останова firebug в функции успеха, значение endFunction(aid)
не срабатывает, но отображается окно предупреждения, отображающее слово true.Это несколько хорошо, поскольку кажется, что мы на самом деле достигаем функции успеха.Переменная hasEnded
, однако, никогда не устанавливается в true, поэтому она всегда возвращает false.Вызов endFunction(1)
из консоли Firebug отображает окно предупреждения со словом true
и возвращает значение false
.
Что не так?