【问题标题】:Javascript object still null after assignment赋值后 Javascript 对象仍然为空
【发布时间】:2015-01-21 06:26:48
【问题描述】:

我有一个函数 setStatus 我这样调用:

$.getJSON( '/api/v1/status', setStatus );

函数如下所示:

function setStatus(data) {
    status = data;
    console.log(data);
    console.log(status);
    timer  = setInterval(updateStatus, 1000);
}

当我运行它时,控制台会在第一行打印一个不错的对象,其中包含我的数据,但它会在第二行打印 [object Object]。稍后我的 updateStatus 尝试使用数据来计算正常运行时间值:

function updateStatus() {
    var table = $('#status');
    table.find('#uptime').text(calculateUptime(status.bootTime*1000));

该表显示了一堆 NaN,推测是因为变量“状态”为空。我做错了什么?

【问题讨论】:

  • 在 setStatus 中,您似乎将 data 分配给了局部变量 status。您是否在全局范围内定义了status
  • @Valdas Rapševičius:我在网上看到很多 cmets 说,通过忽略该声明,您会自动创建一个全局变量。但这没关系,因为即使我把它放在代码中仍然失败。它在所有这些上都失败了:“var status;”、“var status = null;”、“var status = '';”、“window.status = data;”和“window.status = JSON.parse(JSON.stringify(data));”。我用 jquery 经历了许多不同的复制技巧,所有这些都不起作用。

标签: javascript json object global variable-assignment


【解决方案1】:

您是否在某个更高的范围内正确声明了您的 status 变量?

你应该有一个

var status = null;

在全局范围内的某个地方,或者在定义你所说的函​​数的闭包内。 有帮助吗?

【讨论】:

  • 请参阅上面我对 Valdas Rapševičius 的回复。哦,我正在使用 Firefox 33.1.1 进行测试。
  • 太好了,我刚刚发现了问题。 Firefox 不喜欢变量名“status”。如果我将其更改为“boe”,则没有问题并且可以正常工作。我刚刚为此浪费了几个小时的调试时间.... :(
猜你喜欢
  • 2013-03-21
  • 2019-03-14
  • 1970-01-01
  • 2013-03-20
  • 2020-09-24
  • 2015-10-04
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多