【问题标题】:Global Javascript variables in WebkitWebkit 中的全局 Javascript 变量
【发布时间】:2010-11-29 16:13:30
【问题描述】:

我有 Chrome 7.0 并且正在尝试访问全局对象的字段。该代码在 Firefox 和 IE 中运行良好,但 Chrome 的调试器并没有帮助我到达任何地方。我试过 Safari 也有问题。

我可以得到计时器的值,但是当我通过控制台访问状态时,我得到"[object Object]"status.completedJobs 即使在status = $.parseJSON(msg.d); 之后也会返回undefined(json 字符串有效)。

我不确定在此之后该怎么做。从控制台调用$.parseJSON(msg.d); 可以工作,我可以使用调试器查看对象的字段。如何获得正确分配和全局可访问的状态对象?

这是我的代码:

//Object that holds result of AJAX request
var status = new Object();
//Refresh timer variables
var timer;
var timer_is_on = 0;

$(document).ready(function() {
    update();
    doTimer();
});

/**
 * Performs the AJAX request and updates the page
 */
function update() {
    $.ajax({
        type: "POST",
        url: "Default.aspx/getStatus",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            if (msg) {
                try {
                    status = $.parseJSON(msg.d);
                } catch (e) {
                    console.log(e);
                }
                updateProgressBar();
            }
        }
    });
}

function updateProgressBar() {
    var percent = Math.round(status.completedJobs / status.numJobs * 100);
    $('#progressPercentage').text(percent + '%');
    $('#progressbar').progressbar({
        value: percent
    });
}

/**
 * Used to initialize the timer.
 */
function doTimer() {
    if (!timer_is_on) {
        timer_is_on = 1;
        timedCount();
    }
}

/**
 * Executed on every time interval.
 */
function timedCount() {
    update();
    timer = setTimeout("timedCount()", 3000);
}

【问题讨论】:

  • 你试过console.dir()吗?
  • 你确定msg.d吗?你会返回什么数据?
  • 感谢大家的快速回复。 console.dir() 产生 undefined。 msg.d 的回复是:{"d":"{\"numJobs\":269389,\"completedJobs\":102423,\"running\":true}"}
  • Chrome 中的“通过控制台访问状态”是什么意思?我也在 Chrome 7 中,当我执行 console.log(varName) 时,它让我可以选择扩展对象以进行浏览。此外,我可以直接在控制台中输入 varName 并按回车键来获得相同的结果(更不用说在变量名上自动完成以显示它看到它)我唯一看到 [object Object] 表示法是在使用 alerts()
  • 您可以使用调试器浏览 DOM,这就是我看到 [object Object] 的地方。打开控制台后,您可以键入 varname,它会向您显示内容,而无需在代码中执行明确的 console.log。也可以通过这种方式调用函数。

标签: javascript google-chrome safari webkit global-variables


【解决方案1】:

尝试使用 status 以外的其他名称,window 的预定义成员(window 是基于浏览器的 JS 中的全局对象)称为“status”。如果在当前(非全局)范围内存在同名变量时,将全局变量分配给窗口对象以避免冲突也是很好的:

window['statusVar'] = $.parseJSON(msg.d);

【讨论】:

  • 完美适用于所有人!感谢您的帮助,我有点 javascript 菜鸟。
  • 很高兴找到 Dr.Molle。在 Chrome 中打开控制台并在 StackOverflow 和 Google 上输入“状态”,我可以看到它已定义
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 2013-03-05
  • 2022-01-01
相关资源
最近更新 更多