Функция Javascript с JQuery POST всегда возвращает неопределенный - PullRequest
2 голосов
/ 09 сентября 2009

Я понятия не имею, что здесь происходит, и я надеялся, что кто-то может помочь, я уверен, что это просто, что я просто скучаю.

У меня есть функция в javascript, в которой есть пост JQuery. Я хотел бы вернуть результаты поста, который является просто текстом, и поместить его в переменную. Число возвращается из Post правильно, но когда я помещаю его в переменную, переменная говорит "неопределенный". Есть идеи?

var total = GetTotalSize();
alert(total);

function GetTotalSize(){
    var i = "";
    $.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(data){
        i = data.toString();
        return i;
    });
}

Ответы [ 5 ]

6 голосов
/ 09 сентября 2009

Вы не можете так делать. Помните, «A» в AJAX означает «асинхронный». Функция обратного вызова, которую вы предоставляете $.post(), будет хорошо выполняться после выполнения и возврата GetTotalSize().

Вам нужно будет реструктурировать свой код, чтобы приспособиться к этому. Я не могу быть конкретным в своей рекомендации, потому что я не знаю, как выглядит остальная часть вашего кода, но есть возможность.

$.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(data)
{
  doSomethingWithTotalSize( data.toString() );
});

function doSomethingWithTotalSize( totalSize )
{
  // whatever
}
2 голосов
/ 23 марта 2010

Питер абсолютно прав, но вы можете заставить метод $ .ajax работать синхронно, передав async: false.

1 голос
/ 15 августа 2012

Попробуйте это

function GetTotalSize(callback) {    
  $.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(outputData) {
       callback(outputData);
    });
}

function DoSomething(data)
{
   //....
}

GetTotalSize(DoSomething);
1 голос
/ 09 сентября 2009

Проблема в том, что вы возвращаете i вне функции обратного вызова. По сути, когда вы возвращаете i, его содержимое еще не существует и не будет существовать, пока сервер не вернет данные вашей функции обратного вызова.

0 голосов
/ 10 апреля 2012

Я понимаю, что это более старый пост, но для меня было решение использовать complete:[delegate] вместо success. Это гарантирует, что callback завершено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...