2

我正在尝试运行以下代码:

var status = null;
$.ajax({
    type: "GET",
    url: "/status",
    success: function(data, textStatus, jqXHR){
        status = data;
    },
    error: function(jqXHR, textStatus, errorThrown){
        console.error(textStatus + ": " + errorThrown);
    }
});

有趣的部分是以下行:status = data;

在调试器中,我可以看到它data具有值Object {7100665: 0, 8800798: 0}。jQuery 正确地将服务器返回的 JSON 字符串解析为一个对象。

然而,在一行之后,全局变量status具有值"[object Object]"并且表现得像一个字符串对象 -字符串没有像预期的那样分配给它的对象

看起来typeof在进行的分配中有一个隐式调用,这不可能,对吧?还有一些我不知道的事情吗?Content-Typeajax 调用的application/json.

我错过了什么/做错了什么?

4

2 回答 2

4

status因为全局变量实际上是window.status,它是一个(非标准)宿主对象,可让您在实现它的浏览器中操作状态栏的文本。它的值被假定为一个字符串,因此您分配给它的任何值都将被默默地强制转换为一个字符串。

真正的问题是您正在用变量污染全局范围。使用 IIFE,这将不是问题:

(function() {
    var status = null;
})();
于 2013-09-15T03:28:12.153 回答
1

找到它...status保留关键字

于 2013-09-15T03:20:59.333 回答