Функция Javascript с JQuery POST всегда возвращает неопределенный
-
05-07-2019 - |
Вопрос
Я понятия не имею, что здесь происходит, и я надеялся, что кто-то может помочь, я уверен, что это просто, что я просто скучаю.
У меня есть функция в javascript, в которой есть пост JQuery. Я хотел бы вернуть результаты поста, который является просто текстом, и поместить его в переменную. Число возвращается из Post правильно, но когда я помещаю его в переменную, переменная говорит "undefined". Есть идеи?
var total = GetTotalSize();
alert(total);
function GetTotalSize(){
var i = "";
$.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(data){
i = data.toString();
return i;
});
}
Решение
Вы не можете так делать. Помните, что " A " в AJAX означает «асинхронный». Функция обратного вызова, которую вы предоставляете для $. Post ()
, будет хорошо выполняться после выполнения и возврата GetTotalSize ()
.
Вам нужно будет реструктурировать свой код, чтобы учесть это. Я не могу быть конкретным в своей рекомендации, потому что я не знаю, как выглядит остальная часть вашего кода, но есть возможность.
$.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(data)
{
doSomethingWithTotalSize( data.toString() );
});
function doSomethingWithTotalSize( totalSize )
{
// whatever
}
Другие советы
Питер абсолютно прав, но вы можете заставить метод $ .ajax работать синхронно, передав async: false
.
Проблема в том, что вы возвращаете i
вне функции обратного вызова. По сути, когда вы возвращаете i
, его содержимое еще не существует и не будет существовать, пока сервер не вернет данные вашей функции обратного вызова.
Попробуйте это
function GetTotalSize(callback) {
$.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(outputData) {
callback(outputData);
});
}
function DoSomething(data)
{
//....
}
GetTotalSize(DoSomething);
Я понимаю, что это старая запись, но для меня было решение использовать complete: [делегат]
, а не success
. Это гарантирует, что обратный вызов
завершен.