不能使用Ajax之外的创建函数done()回调

时间:2015-09-12 09:44:26

标签: javascript jquery ajax

我有像这样的jQuery Ajax()请求

  function loadMarkers() {
      for (var i = 0; i < data.length; i++) {
          var projects = data[i];
          var project = new esri.geometry.Point(projects.Longitude, projects.Latitude);
      }
  }

  var req1 = $.ajax({
      type: "POST",
      url: "assets/app/data.php",
      data: data,
      cache: false,
      dataType: "JSON"
  });

  req1.done(function (data) {
      loadMarkers();
  });

我尝试将函数loadMarkers()标记为req1..done()的原因是我需要运行20个请求并且我不想重复loadMarkers()块在所有请求.done()中。相反,只需在其中调用loadMarkers(),但我收到此错误

  

未捕获的ReferenceError:未定义数据

你可以告诉我如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

范围取决于定义的函数的位置,而不是调用它的位置。

data变量存在于loadMarkers函数的较窄范围内。

要访问其值,您需要将其作为参数传递。

loadMarkers(data);function loadMarkers(data) {

注意:http://jshint.com/会突出显示此问题。

作为一个可怕的黑客,您还可以在更广泛的范围内定义另一个data变量:

req1.done(function (data) {
  window.data = data;
  loadMarkers();
});

......但不要这样做。 Globals是维护的噩梦。