在onload之后解析json onchange而不使用jquery再次获取JSON?

时间:2014-06-03 18:06:44

标签: javascript jquery json

我目前正在加载运行getJSON函数,就像这样。

$(document).ready(function() {

   //get year
   var curr_year = $("#year").val(); //returns 2014 from select menu

   $.getJSON(URL, function(json) {
        $.each(json, function(i, item) {
               if(item.year == curr_year){
               //do stuffstuff
               }
            })  
     });

   $("#year").change(function(){
     curr_year = $("#year").val();
     $.each(json, function(i, item) {
               if(item.year == curr_year){
               //do stuffstuff
               }
            })  
   });

});//end on ready

目前onchange不起作用,因为我不知道如何利用已经调用的json进行更改。有人可以告诉我如何在不必再次调用json的情况下完成此任务吗?

谢谢

4 个答案:

答案 0 :(得分:1)

将结果存储在两个函数都可以访问(全局)

的变量中
var myJson;
$.getJSON(URL, function(json) {
    myJson = json;
    $.each(json, function(i, item) {
           if(item.year == curr_year){
           //do stuffstuff
           }
        })  
 });

myJson现在有您的回复。然而! get调用是异步的,因此您的更改可以在数据返回之前执行,从而导致null异常。请务必添加支票!

答案 1 :(得分:1)

您需要在调用之后将JSON保存在某些var中,如下所示(需要进行一些清理)。获得JSON之后,您可以分配更改观察器,此时此JSON可用。

$(document).ready(function() {

   //get year
   var curr_year = $("#year").val(); //returns 2014 from select menu

   $.getJSON(URL, function(json) {

        $.each(json, function(i, item) {
           if(item.year == curr_year){
           //do stuffstuff
           }
        });
        // now you can assign your onchange event
        $("#year").change(function(){
          curr_year = $("#year").val();
          $.each(json, function(i, item) {
           if(item.year == curr_year){
           //do stuffstuff
           }
          })  
        });
    });
});//end on ready

答案 2 :(得分:0)

或者在getJSON回调中嵌套onchange:

$(document).ready(function() {

   //get year
   var curr_year = $("#year").val(); //returns 2014 from select menu

   $.getJSON(URL, function(json) {
        $.each(json, function(i, item) {
               if(item.year == curr_year){
               //do stuffstuff
               }
            }); 

         $("#year").change(function(){
             $.each(json, function(i, item) {
                 if(item.year == curr_year){
                 //do stuffstuff
                 }
              })  
         });

     });


});//end on ready

答案 3 :(得分:0)

您只需要在两个函数都可以访问的作用域中声明json变量。在这种情况下,我会在curr_year之后立即声明它:

var curr_year = $("#year").val(); //returns 2014 from select menu
var json = {};

现在,在更改事件处理函数中,您可以使用加载了getJSON的json数据。