AJAX通过回调返回JSON过滤响应

时间:2017-06-18 22:33:09

标签: javascript jquery json ajax

我觉得我很接近,我需要返回我过滤的json对象数据,并能够在将来的函数中使用它。我的主要问题是它的说法"回调不是一个功能"。我在顶部响应中使用了第二种方法How do I return the response from an asynchronous call? 谢谢!

function randomFxn(callback){
  var newObj = {};
  $.ajax({
    type: 'GET',
    url: 'https://api.imgur.com/3/album/' + imgurID + '/images',
    headers: {'Authorization': 'Client-ID '+ key},
    success: function(jsonData){
      var nameArr = ['mario', 'luigi', "...some other stuff"];
      var counter = 0;
      var inCounter = 0;

      for(var i = 0; i < nameArr.length; i++){
        for (var j = 0; j < 8; j++){
          newObj[nameArr[counter]+j] = jsonData.data[inCounter].link;
        }
        counter++;
      }

      // $('body').html(`<pre>${JSON.stringify(newObj, null, '\t')}</pre>`);
      console.log(newObj);
      callback(newObj);
    }
  });
}

2 个答案:

答案 0 :(得分:2)

我想,您必须像这样致电randomFxn

randomFxn(function(result) {
  console.log("got result", result);
});

答案 1 :(得分:0)

错误不在此函数中 - 它是您调用此函数的方式。

根据应用程序的逻辑,有两种方法可以解决问题。您可以将功能更改为:

function randomFxn(){
  var newObj = {};
  $.ajax({
    type: 'GET',
    url: 'https://api.imgur.com/3/album/' + imgurID + '/images',
    headers: {'Authorization': 'Client-ID '+ key},
    success: function(jsonData){
      var nameArr = ['mario', 'luigi', "...some other stuff"];
      var counter = 0;
      var inCounter = 0;

      for(var i = 0; i < nameArr.length; i++){
        for (var j = 0; j < 8; j++){
          newObj[nameArr[counter]+j] = jsonData.data[inCounter].link;
        }
        counter++;
      }

      // $('body').html(`<pre>${JSON.stringify(newObj, null, '\t')}</pre>`);
      console.log(newObj);
    }
  });
}

或者,无论您何时致电randomFxn,都需要将另一个函数作为参数传递:

randomFxn(function() {
    // do something here
});