Jquery 将加载的json传递给多个函数

Jquery 将加载的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."); });

因此,我有一些函数可以完成多项任务,但是我需要通过它们中的大多数传递一个json对象。背后的原因是需要使用多个JSON

我使用函数加载json

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(结果);}()