JQuery Ajax调用,返回值问题

时间:2010-07-30 20:11:54

标签: javascript jquery ajax

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 个答案:

答案 0 :(得分:1)

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;
}

答案 1 :(得分:0)

你可以做你正在描述的唯一方法是使AJAX调用同步,你不想这样做,因为它会在发出请求时锁定UI线程,浏览器可能会冻结。没有人喜欢冷冻。

您要做的是使用回调。发布所涉及的其他功能的代码,以便我可以更好地了解正在发生的事情。但基本上,你想要做的是创建一个异步循环。

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
    });
}