var plane;
$.getJSON(sTailFileName, function(plane) {
$('#upTailNum').html(plane.tailNum + ' ' + plane.airplaneType);
document.title="Load " + plane.tailNum;
.... goes on for 300+ statements ....
});
而且效果很好。但是,我想做的是这样的:
var plane;
$.getJSON(sTailFileName, function(plane) {});
$('#upTailNum').html(plane.tailNum + ' ' + plane.airplaneType);
document.title="Load " + plane.tailNum;
但这给了我“飞机未定义”的信息。我需要从getJSON的范围之外出发-或至少要这么做。我已经尝试了很多东西,包括$ .proxy和通过闭包(我还不太了解),但是到目前为止没有成功。
这是我第一次使用Javascript / jQuery。我试图替换最初是在1988年写的旧DOS程序。有关详细信息,请参见http://terryliittschwager.com/WB/wbjs.html。
任何帮助将不胜感激!
特里·里希施瓦格(Terry Liittschwager)
最佳答案
您对getJSON
的回调函数获取plane
值,但不执行任何操作;因此,当您执行plane.tailNum
时,仍未定义plane
,因为从未为其分配值。另外,getJSON
调用是异步的,因此您不能仅仅这样做:
$.getJSON(sTailFileName, function(x) { plane = x; });
因为尝试访问
plane = x
时将不会执行plane.tailNum
(除非您对计时非常幸运)。您可以将
getJSON
调用替换为同步的$.ajax
调用,并在plane
回调中将JSON blob分配给success
,或者继续采用第一种方法。您始终可以将“继续执行300多个语句”放在单独的命名函数(例如three_hundred_lines
)中,并按名称进行引用:function three_hundred_lines(plane) { /* ... */ }
$.getJSON(sTailFileName, three_hundred_lines);
如果您不想内联大量代码。
关于javascript - 从读取它的回调函数外部访问json字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5589942/