我在另一个函数中使用了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上设置了一个示例,如果你能告诉我我的代码哪里出错了,我会非常感激。 谢谢!
答案 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.