-1

我有这段代码,我想让变量表成为全局变量,但它不起作用,我不明白为什么,有人可以帮助我吗?

      var table;
      function formatCustomerResults(obj) {
            var rows = Array();
            for (i = 0; i < obj.length; i++) {
                var item = obj[i];
                rows.push({
                    cell : [ item.guid, item.limittime, item.limitname ]
                });
            }

            console.log(rows);
            table = rows;

            return {
                total : obj.length,
                page : 1,
                rows : rows
            };
        }

        $.ajax({
            type : 'GET',
            url : 'http://localhost:6181/fintpWebServices/api/timelimits',
            dataType : 'json',
            success : function(data) {
                obj = data.timelimits;
                formatCustomerResults(obj);
            }
        });

         console.log(table);
4

4 回答 4

2

您正在进行异步调用,您的行为就像它是同步的一样。您在触发回调之前调用 console.log() 。阿贾克斯 101 的东西。

于 2013-07-01T12:35:34.780 回答
0

实际上表变量是在您的变量更新之前设置的,因为此代码是asynchronous在使用之后ajax

如果你console打电话formatCustomerResults后,它会显示你的table

        success : function(data) {
            obj = data.timelimits;
            formatCustomerResults(obj);
            console.log(table);// this will print data
        }
于 2013-07-01T12:37:09.040 回答
0

你的问题是你在打电话

console.log(table);

before table实际上由您的 AJAX 调用和函数formatCustomerResults 填充。请记住,AJAX 的“A”代表“异步”。

于 2013-07-01T12:36:22.807 回答
-1

我假设您显示的代码是由一个更大的函数包装的?这可以解释为什么它是在本地而不是在全球范围内声明的。

为确保一个变量总是全局声明,只需将其定义为窗口对象的属性,因此删除该行

var table;

并更换

table = rows;

window.table = rows;

你也可以简单地写

table = rows;

无需将 table 声明为局部变量,但最好将全局变量显式定义为 window 对象的属性(这就是全局变量),以便读者清楚您对全局变量的定义是有意的。

于 2013-07-01T12:36:50.363 回答