JSON对象在浏览器中为null,但不是firebug

时间:2012-06-05 19:05:54

标签: javascript jquery ajax json

当我在firebug中单步执行此javascript代码(scoreboard.js)时,它可以正常处理警报。当我没有在firebug中放置换行符并且正常运行时,我收到了“favs is null”消息(没有警报)。

var favs = $.getJSON("favs.json");
favs = $.parseJSON(favs.responseText);
favs = favs.myTeams;

for (i=0; i<favs.length; i++){
    alert(favs[i].text);
}

JSON(favs.json)

{"myTeams":[{"sport":10,"id":10,"abbrev":"NYY","isFav":false,"text":"New York  Yankees","sw_abbrev":"nyy"},{"sport":28,"id":19,"abbrev":"nyg","isFav":false,"text":"New York Giants","sw_abbrev":"nyg"},{"sport":46,"id":18,"abbrev":"NY","isFav":false,"text":"New York Knicks","sw_abbrev":"nyk"},{"sport":90,"id":11,"abbrev":"NJ","isFav":false,"text":"New Jersey Devils","sw_abbrev":"njd"},{"sport":41,"id":2507,"abbrev":"PROV","isFav":false,"text":"Providence Friars"},{"sport":46,"id":17,"abbrev":"NJ","isFav":false,"text":"New Jersey Nets","sw_abbrev":"njn"},{"sport":600,"id":363,"abbrev":"Blues","isFav":false,"text":"Chelsea","sw_abbrev":"ENG.CHELSEA","isNational":false}]}

HTML

<html>
<head>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
    <script type="text/javascript" src="scoreboard.js"></script>        
</head>

<body>
    Test
</body>

知道这里发生了什么吗?

5 个答案:

答案 0 :(得分:2)

您不需要

favs = $.parseJSON(favs.responseText); 

我非常确定$.getJSON()不返回json,但会返回jqXHR

查看parseJSON()的文档,您可能应该这样做:

  

jQuery.getJSON(url [,data] [,success(data,textStatus,jqXHR)])

$.getJSON("favs.json",
          function(json)
{
  var favs = json.myTeams;  

  for (i=0; i<favs.length; i++){  
    alert(favs[i].text);  
  }  
});  

$.getJSON() - 成功回调(在我的示例中是匿名函数)传递返回的数据,该数据通常是由JSON结构定义的JavaScript对象或数组,并使用$ .parseJSON()进行解析方法。

答案 1 :(得分:2)

$。getJSON期望成功回调。这应该有效:

$.getJSON('favs.json', function (data) {
    favs = data.myTeams;

    for (i=0; i<favs.length; i++){
        alert(favs[i].text);
    }
});

您在单步执行代码时看到它工作正常的原因可能是因为您完成了异步调用时间。

答案 2 :(得分:1)

$.getJSON是异步的。这意味着它在后台运行,因此在检索JSON之前调用$.getJSON之后的行。

您应该将所有处理JSON的代码放在回调中。

(不需要P.S。$.parseJSON$.getJSON为你做这件事。)

$.getJSON("favs.json", function(favs){
    favs = favs.myTeams;

    for (i=0; i<favs.length; i++){
        alert(favs[i].text);
    }
});

答案 3 :(得分:1)

问题出在第一行:

var favs = $.getJSON("favs.json");

getJSON()方法是异步的。即响应从服务器返回需要时间,并且在运行其余代码之前,javascript不会等待并等待。

您需要使用回调函数,该函数在响应返回后执行:

var favs = null;
$.getJSON("favs.json", function(data) {
    // data is what the server returned
    // now you can do stuff with it
    favs = data.myTeams;

    // the rest of your code goes here
})

答案 4 :(得分:0)

对我来说看起来像是一场竞争。 getJson函数接受一个onSuccess参数,该参数将在加载数据时被调用。如果你将其他行移到该功能中,你应该是好的。

以下文档链接中有一些很好的例子。我在这里发布的代码是基于您提供的此信息的更多示例显示。

http://api.jquery.com/jQuery.getJSON/

有些事情:

var favs = $.getJSON("favs.json", function(data) {
    favs = $.parseJSON(data.responseText);
    favs = favs.myTeams;

    for (i=0; i<favs.length; i++){
        alert(favs[i].text);
    }
} );