2016-06-08 57 views
0

我有一个函数被调用多次,它使用jQuery从API中获取不同的JSON。添加JSON长度

我一直在试图获得该JSON的部分累计数。这是那种我有什么:

getTheData(aBlah,bBlah,cBlah); 

getTheData(aStuff,bStuff,cStuff); 

function getTheData(aBlah,bBlah,cBlah){ 
    $.ajax({ 
    url: 'https://my.url.com/aBlah?bBlah?cBlah', 
    type:"GET", 
    data: { fields: "subdata" }, 
    dataType: "jsonp", 
    contentType:"application/json", 
    jsonpCallback: myCallback, 
    success: function(data){ 
     console.log(data.subdata.length); 
     'the rest of the code' 
    }); 
} 

我想获得累计data.subdata.length的,但我不知道如何去得到它。

+2

您添加的代码中存在语法错误。 – RRK

+0

您可以创建一个计数器作为全局变量来存储长度。将其初始化为0,然后每个Ajax响应将其长度添加到计数器值中。说得通? –

回答

0

这是一个典型的用例closures

var closure = function(){ 

    var counter = 0; 

    function getTheData(aBlah,bBlah,cBlah){ 
    $.ajax({ 
    url: 'https://my.url.com/aBlah?bBlah?cBlah', 
    type:"GET", 
    data: { fields: "subdata" }, 
    dataType: "jsonp", 
    contentType:"application/json", 
    jsonpCallback: myCallback, 
    success: function(data){ 
     counter += data.subdata.length; 
     'the rest of the code' 
    }); 
} 

function getcount(){ 
    return counter; 
    } 

    return { 
     getTheData:getTheData, 
     getcount:getcount 
    } 
}; 

var myClosure= closure(); 
myClosure.getTheData(aBlah,bBlah,cBlah); 
myClosure.getTheData(aStuff,bStuff,cStuff); 

var count = myClosure.getcount(); 

这有助于控制计数器变量的作用域。因此,您可以执行以下操作:

var myClosure= closure(); 
myClosure.getTheData(aBlah,bBlah,cBlah); 
myClosure.getTheData(aStuff,bStuff,cStuff); 

var count = myClosure.getcount(); 

//counter in the new closure is zero 
var newClosure = closure(); 

newClosure.getTheData(aBlah,bBlah,cBlah); 
newClosure.getTheData(aStuff,bStuff,cStuff); 

var totallyNewCount = myClosure.getcount();