Вызов JQuery Ajax, проблема с возвращаемым значением - PullRequest
0 голосов
/ 31 июля 2010
function getMore(from){
 var initData = "&start-index=";
 initData += from;
 $.ajax({
  type:"POST",
  url: '', //removed the URL
  data: initData,
  dataType: 'json',
  success: function(result) {
   return result;
  },
  error: function(errorThrown) {

  }
 });

 return result;
}

Это базовый запрос Google;У меня есть другая функция, которая делает начальный вызов сервера и получает первые 250 элементов.Затем у меня есть счетчик хода, и пока результаты = 250, он снова вызывает сервер, но начиная с «start-index =» текущего количества элементов, которые были извлечены.Эта часть все работает правильно, и с помощью firebug я также вижу, что ответ сервера соответствует JSON.

Проблема, с которой я столкнулся, заключается в попытке вернуть JSON из этой функции в функцию, которая ее вызвала.Я не хочу снова вызывать исходную функцию, потому что она очистит массивы данных, уже извлеченных с сервера.Каждый раз, когда он возвращается к родительской функции, он становится нулевым.

Кто-нибудь знает, как я могу вернуть данные, используя «возврат»?

Ответы [ 2 ]

1 голос
/ 31 июля 2010
function FuncionCallGetMore(){
    //...    
    getMore('x-value', FuncionGetReturn);
    //...
}  

function FuncionGetReturn(error, value){
   if (!error) {
       // work value
   }
}

function getMore(from, fn){

  var initData = "&start-index=" + from;

  $.ajax({
    type:"POST",
    url: '', //removed the URL
    data: initData,
    dataType: 'json',
    success: function(result) {
      fn(false, result);
    },
    error: function(errorThrown) {
      fn(true);
    }


    });

    return;
}
0 голосов
/ 31 июля 2010

Единственный способ сделать то, что вы описываете, - это сделать синхронный вызов AJAX, чего вы не хотите делать, так как он заблокирует поток пользовательского интерфейса во время выполнения запроса, а браузерчтобы заморозить.Никто не любит замораживать.

То, что вы хотите сделать, это использовать обратные вызовы.Опубликуйте код других задействованных функций, чтобы я мог лучше понять, что происходит.Но в основном вам нужно создать асинхронный цикл.

function listBuilder() {
    var onError = function(response) {
        // ...
    };
    var onSuccess = function(response) {
        // Handle the items returned here

        // There are more items to be had, get them and repeat
        if ( response.length == 250 ) {
            getMore(onSuccess, onError, 250);
        }
    };

    getInitialSet(onSuccess, onError);
}

function getMore(onSuccess, onError, from) {
    $.ajax({
        type:"POST",
        url: '', //removed the URL
        data: "&start-index=" + from,
        dataType: 'json',
        success: onSuccess,
        error: onError
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...