我有这样的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:未定义数据


你能让我知道如何解决这个问题吗?

最佳答案

范围是由定义函数的位置(而不是从调用位置)决定的。

data变量的范围比loadMarkers函数的范围更窄。

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

loadMarkers(data);function loadMarkers(data) {

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



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

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


……但是不要那样做。全球人员是一场维护噩梦。

08-17 06:50