将JSON解析值传递给全局变量

时间:2014-07-04 04:08:58

标签: javascript jquery json

$(function() {

        var global_datalength = 0;
        leavereminder();
        alert(global_datalength);

    });


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 datalength = data.length;
        });
        global_datalength = datalength;
    }

我有一个global_datalength的全局变量,我想用我的返回json替换它 但是当我提醒我的代码时它始终为0.它没有通过我的global_datalength = datalength。因为在json函数之外我的data.length是未知的

2 个答案:

答案 0 :(得分:0)

删除var上的global_datalength关键字,使其成为全局。

您也可以使用window.global_datalength

另一种方法是在jQuery ready函数之外声明变量。


您的JSON调用是异步的。这意味着在JSON从服务器返回之前将调用警报。

你能做的是:

function leavereminder() {
    $.ajax({
        dataType: "json",
        url: "<?=base_url()?>home/leavereminder",
        async: false,
        success: 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);           
                }
            }
            global_datalength = datalength;
        },
    });
}

答案 1 :(得分:0)

需要将global_datalength保留在jQuery函数之外。

此外,由于leavereminder是异步的,您可能希望将global_datalength = datalength;保留在function(data)

var global_datalength = 0;

 $(function () {
     leavereminder();
 });

 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);
             }
         }
         global_datalength = data.length;
         alert(global_datalength);
     });

 }