-1
    function getData(jsonAddress) {
      var data = new Array();
      var xhr = $.getJSON(jsonAddress, function(meas) {
        for (var i = 0; i < meas.length ; i++) {
          var dt = datetimeSplitter(meas[i].valuedate);
          data[i] = [Date.UTC(dt[0],dt[1]-1,dt[2],dt[3],dt[4],dt[5]),parseInt(meas[i].value,10)];
        };
      });
      alert(data);
    }

我想让变量“数据”对函数可用,getData这样我就可以返回它(在这种情况下是警报)。我理解这是一个范围问题,可以通过闭包来解决。我也了解什么是闭包,但绝对不知道这种特定情况的语法。

4

3 回答 3

5

这不是范围的问题,而是异步回调的问题。

您需要将回调函数传递给此方法,以便获得getJSON()调用的响应。

于 2012-10-08T00:45:32.077 回答
3

$.getJSON(jsonAddress, function(meas)....是一个异步调用,即警报语句将在回调函数(其中数据设置有响应值)被调用之前被调用。如果您将警报移动到回调函数中,您将看到它具有正确的值。

于 2012-10-08T00:48:03.207 回答
0

如果你真的不能像之前多次建议的那样使用异步调用,你也可以使用 ($.ajax)[http://api.jquery.com/jQuery.ajax/] 代替 - $.getJSON 只是一个它的变体 - 并使其同步 - 请注意,这不是建议的方法,因为您的应用程序将在浏览器同步检索数据时阻塞。

于 2012-10-08T01:16:00.020 回答