передать параметр из обратного вызова $ .post () во внешнюю переменную - PullRequest
3 голосов
/ 19 апреля 2010

В основном я хочу сохранить параметр, который извлекает значение из вызова $ .post () следующим образом:

init = function(){          
var lastpage = getLastPage();
}

        function getLastPage(){
            $.post("getInfo.php",{ 
                last: "yes"
            },
            function(data){
                setLast(data.last);
            },'json');

            return function setLast(data){
                return data;
            }
        }

поэтому при достижении последнего поста (последней страницы) я должен проверить переменную lastpage, значение которой возвращено функцией getLastPage ().

Я довольно размыт с указателем javascript и всем. Пожалуйста, помогите, ребята.

обновление (20/4/2010):

Я сделал наоборот, как это:

init = function(){            
  getLastPage();
  if((page+1) == $("#lastpage").val()){
     alert("this is last post");
  }else{
     page++;
     //get info and display to the page here
  }
}
     function getLastPage(){
        $.post("getInfo.php",{ 
            last: "yes"
        },
        function(data){
            $("#lastpage").val(data.last);
        },'json');
    }

сначала запустите функцию, чтобы временно сохранить значение в скрытом теге ввода (последняя страница), а затем снова захватите значение, чтобы проверить его при каждом нажатии кнопки «Вперед».

если у вас у всех есть более подходящий способ, пожалуйста, скажите мне.

1 Ответ

3 голосов
/ 19 апреля 2010

Вы должны изменить свой код так:

$.post("getInfo.php",{ last: "yes" },
  function(data){ 
    functionToRunAfterYouHaveDataSometimeLater(data.last); 
  }
,'json');

Проблема вашего общего подхода в том, что с AJAX вы имеете дело с асинхронной операцией. Это означает, что часть function(data) { } не запускается тогда, она запускается позже , поэтому ваш return фактически ничего не возвращает, это будет undefined.

Вместо этого подхода вам нужно вызвать $.post(), а затем вызвать любую функцию, основанную на этих данных, чтобы продолжить как часть обратного вызова $.post(). После этого ваш порядок кода выглядит следующим образом:

  • $.post() выполняет, запуская запрос к серверу
  • Остальная часть вашего кода после $.post() запускается
  • Позже когда ответ приходит с сервера и у вас есть данные, ваш обратный вызов выполняет
  • Теперь продолжайте делать то, что вам нужно с этими данными
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...