如何从Javascript的父函数返回在子jQuery函数中生成的数组

How to return an array made in a child jQuery function from the parent function in Javascript?

本文关键字:函数 jQuery 数组 返回 Javascript      更新时间:2023-09-26

我在另一个函数内使用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上建立了一个例子,如果你能告诉我我的代码错在哪里,我会非常感激。谢谢你!

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

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()"调用是异步的。当回调函数被调用时(在这里您写了"I HAVE the DATA HERE"),外部函数已经返回了。您不能让浏览器等待调用完成,因此您可以设计API,以便代码可以传入并在结果可用时稍后运行。

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

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.