繁体   English   中英

关于jQuery中的getJSON函数

[英]About getJSON function in jQuery

{
   "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出现这种错误行为? 我在每个警报中放置了一个,然后检查该值。 它返回正确的值。

$.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. 您执行ajax调用。 请求被发送到服务器。

  2. 您警报数组的值。 它们为空,因为服务器尚未回复。

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

解:

将警报逻辑放入回调中。

其他注意事项

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

试试这个代码:

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

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

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

返回的JSON不是jQuery对象,而只是普通的JavaScript对象。 改用foreach(输入数据)。

哦,将alert()移到回调函数中:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM