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/

10-10 14:50