计算返回功能

时间:2014-06-30 04:28:58

标签: javascript

如何计算或检查返回功能的长度

function leavereminder() {
        $.getJSON("<?=base_url()?>home/leavereminder",
            {},
            function(data) {
                if(data.length != 0) {
                    for(x=0; x<data.length; x++) {
                        var lblm = document.createElement('div');        
                        lblm.innerHTML = '<label>'+data[x]+'</label>';  
                        lblm.className = 'alert alert-info';                  
                        document.getElementById('notifbody').appendChild(lblm);           
                    }
                }
                var b = data.length;
        });
    }

我希望我的变量b是全局变量,所以我可以获取长度

4 个答案:

答案 0 :(得分:2)

您无法从异步调用返回值。相反,您可以使用回调来了解异步调用何时完成。在您的示例中:

leavereminder(function(length) {
    console.log(length); // This will get you your data length immediately after JSON call is completed.
});
function leavereminder(callBack) {
    $.getJSON("<?=base_url()?>home/leavereminder",
        {},
        function(data) {
            if(data.length != 0) {
                for(x=0; x<data.length; x++) {
                    var lblm = document.createElement('div');        
                    lblm.innerHTML = '<label>'+data[x]+'</label>';  
                    lblm.className = 'alert alert-info';                  
                    document.getElementById('notifbody').appendChild(lblm);           
                }
            }
            // Instead of this : var b = data.length;
            callBack(data.length); // This will send the length back(alternate for return)
    });
}

使用全局变量的问题是你永远不知道调用何时完成(除非你添加一个观察者,但为什么不保持简单?)

答案 1 :(得分:1)

不清楚你的意思是&#34;检查返回功能的长度,&#34;但我认为你的意思是检查b的价值。在这种情况下,只需在回调之外声明b,如下所示:

var b = 0;
function leavereminder() {
    $.getJSON("<?=base_url()?>home/leavereminder",
        {},
        function(data) {
            if(data.length != 0) {
                for(x=0; x<data.length; x++) {
                    var lblm = document.createElement('div');        
                    lblm.innerHTML = '<label>'+data[x]+'</label>';  
                    lblm.className = 'alert alert-info';                  
                    document.getElementById('notifbody').appendChild(lblm);           
                }
            }
            b = data.length;
    });
}

P.S。您应该使用比b更具描述性的变量名称 - 此名称很难调试,并且可能与页面上的其他脚本冲突。

答案 2 :(得分:1)

如果您希望b是全局的,那么您需要在函数外部初始化它。然后b可以访问leavereminder()

var b;

function leavereminder() {
        $.getJSON("<?=base_url()?>home/leavereminder",
            {},
            function(data) {
                if(data.length != 0) {
                    for(x=0; x<data.length; x++) {
                        var lblm = document.createElement('div');        
                        lblm.innerHTML = '<label>'+data[x]+'</label>';  
                        lblm.className = 'alert alert-info';                  
                        document.getElementById('notifbody').appendChild(lblm);           
                    }
                }
                b = data.length;
        });
    }

答案 3 :(得分:0)

使用jquery将其写入隐藏的html输入字段,稍后再使用。

在你的ajax电话中:

$('#count_var').val(data.length);

你的html收集点数:

<input type="hidden" name="count_var" id="count_var" />