我目前正在加载运行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的情况下完成此任务吗?
谢谢
答案 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数据。