如何从Javascript中的父函数返回子jQuery函数中的数组?

时间:2011-09-21 21:03:35

标签: javascript jquery json function return

我在另一个函数中使用了jQuery json函数,如何将jQuery函数中的数组作为父函数的返回值返回?

这是基本设置

function getFlickrSet(flickr_photoset_id){
  var images = [];

  images = $.getJSON(url, function(data){ return data; // I HAVE THE DATA HERE };

  return images // I HAVE NO DATA HERE
}
var myImages = getFlickrSet(23409823423423);
alert(myImages); // this gives me nothing

我在jsfiddle right here上设置了一个示例,如果你能告诉我我的代码哪里出错了,我会非常感激。 谢谢!

2 个答案:

答案 0 :(得分:4)

你做不到。相反,传入一个函数:

function getFlickrSet(flickr_photoset_id, when_ready){
  var images = [];

  $.getJSON(url, function(data){ 
    // prepare images
    when_ready( images );

  });
}

getFlickrSet(nnnn, function(images) {
  alert(images);
});

为什么你不能这样做?因为“$ .getJSON()”调用是异步。当调用回调函数时(你写的地方“我有数据在这里”),外部函数已经返回。您无法让浏览器等待该调用完成,因此您可以设计API,以便可以传入代码并在结果可用时运行。

答案 1 :(得分:1)

嗯,Ajax是异步的(这就是'A'代表的意思),所以你必须以异步方式执行此操作,这可以归结为回调。您需要做的是将回调函数传递给您希望在Ajax请求完成时调用的外部函数(如果愿意,“回调”)。你可以像这样给它'警报':

function getFlickrSet(flickr_photoset_id) {
  images = $.getJSON(url, alert); // <-- just the name of the function, no ()
}
var myImages = getFlickrSet(23409823423423);
// => An alert pops up with the data!

...但你更有可能写下这样的东西:

function doSomethingWithData(data) { // we'll use this later
  alert(data); // or whatever you want
}

function getFlickrSet(flickr_photoset_id, callback) {
  // new parameter here for a function ------^
  // to be given here -------v
  images = $.getJSON(url, callback);

  return images // I HAVE NO DATA HERE
}

var myImages = getFlickrSet(23409823423423, doSomethingWithData);
// => Your function `doSomethingWithData` will be called the data as a parameter
//    when the $.getJSON request returns.