Jquery 将加载的json传递给多个函数
因此,我有一些函数可以完成多项任务,但是我需要通过它们中的大多数传递一个json对象。背后的原因是需要使用多个JSON 我使用函数加载jsonJquery 将加载的json传递给多个函数,jquery,function,Jquery,Function,因此,我有一些函数可以完成多项任务,但是我需要通过它们中的大多数传递一个json对象。背后的原因是需要使用多个JSON 我使用函数加载json function LoadJSON(path) { $.getJSON(path, function() { }) .done(function(results) { return results; }) .fail(function() { alert("Error loading content."); });
function LoadJSON(path) {
$.getJSON(path, function() { })
.done(function(results) { return results; })
.fail(function() { alert("Error loading content."); });
}
function LoadScene(button) {
...
LoadButtons(LoadJSON('js/content.json'), id); // id is determined in code
}
…从那里我尝试将其加载到函数中
function LoadJSON(path) {
$.getJSON(path, function() { })
.done(function(results) { return results; })
.fail(function() { alert("Error loading content."); });
}
function LoadScene(button) {
...
LoadButtons(LoadJSON('js/content.json'), id); // id is determined in code
}
…最后我尝试访问函数中的数据我最需要它
function LoadButtons(obj, id) {
alert(obj['data']);
}
。。。我已经成功地直接加载了它,没有加载函数,也没有将它从一个函数传递到另一个函数,但是为了使我的代码更有效,我需要正确地将它们分开
但是,它不起作用:我已经设法在LoadButtons函数中使用了ajax调用,但是当我将它分成三个单独的函数时,它将不起作用,并且警报返回“undefined”
我是如何实现它的?您的
LoadJSON
永远不会返回json,因为它是异步的-所以LoadButtons(LoadJSON())
不起作用
您需要传递一个回调函数才能成功,例如:
function LoadJSON(path, ondone) {
$.getJSON(path, function() { })
.done(function(results) {
if ($.isFunction(ondone)) ondone(results);
})
.fail(function() { alert("Error loading content."); });
}
function LoadDone(json)
{
.. work with json
}
// call with:
LoadJSON('js/content.json', function(results) { LoadDone(results); })
//or
LoadJSON('js/content.json', LoadDone )
或者直接使用承诺:
function LoadJSON(path, ondone) {
return $.getJSON(path, function() { })
.fail(function() { alert("Error loading content."); });
}
LoadJSON('js/content.json')
.done(function(results) {
LoadDone(results)
});
我想在这里添加一些关于
返回的详细信息:
function LoadJSON(path) {
$.getJSON(path, function() { })
.done(function(results) { return results; })
.fail(function() { alert("Error loading content."); });
}
首先,我要补充一点,LoadJSON中没有return
,因此您总是会得到null,但是有一个“类”返回,它在.done
中。但这并不是LoadJSON的一部分,因为它稍后会出现(因为$。getJSON
是异步的)
因此发生的情况是:
- LoadJSON启动
- 看到$.getJSON并说:好的-我将根据您提供的详细信息启动ajax调用,并立即返回
- LoadJSON退出(没有返回语句,因此返回null
- 然后ajax调用完成并点击
.done
,它将结果返回给jquery ajax处理程序
您的尝试是否有问题,或者这是一个模糊的抛出查询,以查看这是否可行?它不起作用。我已设法在LoadButtons函数中使用ajax调用,但是当我将其分为三个单独的函数时,它不起作用,警报返回“未定义”。//调用with:LoadJSON('js/content.json',function(results){LoadDone(results);})
会立即调用LoadDone
?@guest271314为什么这样认为?它传递的是一个匿名函数,而不是调用该函数。只有在使用ondone(results)调用anon函数时才会调用它。
“它传递的是匿名函数,而不是调用该函数。”()
调用函数?我对ajax是异步的有一些想法,但我承认我忽略了这一事实。@guest271314()
(如(results)
在函数定义中,这会立即调用它:函数(results){LoadDone(结果);}()