关于jQuery中的getJSON函数

时间:2012-01-16 12:15:24

标签: javascript jquery json jsonp

{
   "Adam":{
      "Math":"93",
      "Science":"96",
      "Email":"adam@example.com",
      "City":"NY"
   },
   "Tom":{
      "Math":"65",
      "Science":"56",
      "Email":"tom@example.com",
      "City":"LA"
   },
   "Joe":{
      "Math":"74",
      "Science":"83",
      "Email":"joe@example.com",
      "City":"Washington"
   }
}

以上是http://ActualUrl/path.json

中出现的JSON内容

我正在访问JSON文件并使用以下代码在科学中填充名称和标记的两个数组。

     var names=[];
     var marks=[];
    $.getJSON("http://path.json",function(data){               
                $.each(data, function(key, val) {   
                     names.push(key);
                    // I placed alert the check the value key.
            marks.push(parseInt(val.Science));                  
                    });
                });
    alert(names.toString()); // names is found blank
    alert(marks.toString()); 

当我在最后检查数组时。数组被发现为空白。为什么这个错误的行为与getJSON?我在每个中都设置了警报并检查了值。它返回正确的值。

3 个答案:

答案 0 :(得分:4)

$.getJSON异步触发,这意味着在大多数情况下,在您读出变量时它不会完成。您需要重新构建解决方案,以便在其成功回调中执行您想要执行的操作:

$.getJSON("http://path.json", function(data) {
    $.each(data, function(key, val) {
        names.push(key);
        marks.push(parseInt(val.Science));
    });

    // do your thing here.
});

答案 1 :(得分:2)

主要问题

您正在异步回调中填充数组,但会立即提醒他们。所以,这就是:

  1. 您执行ajax调用。请求被发送到服务器。

  2. 您提醒数组的值。它们是空白的,因为服务器尚未回复。

  3. 服务器回复,您的回调被触发并且数组被填充。太晚了。

  4. 解决方案:

    将警报逻辑放入回调中。

    其他说明

    jQuery.each用于迭代集合。另一方面,你有一个对象(或字典)。

    试试这段代码:

    for(key in data) {
      names.push(key);
      var val = data[key];
      marks.push(parseInt(val.Science));                  
    }
    

    for ... in ...构造迭代对象属性,这就是你想要的。

答案 2 :(得分:0)

$。each描述:迭代jQuery对象,为每个匹配的元素执行一个函数。 (来自:http://api.jquery.com/each/

返回的JSON不是jQuery对象,只是一个普通的JavaScript对象。请改用foreach(键入数据)。

哦,并在回调函数中移动alert():)