从获得的回调函数变量(Get variable from callback function)

2019-09-28 07:30发布

function foreignCoordinatesArray(){

  var coordinates = [];
  $.getJSON('/critics.json?travel_id=' + $('#foreign_travel').val(), success);

  function success(ary) {
    for(var a in ary){
      var obj = ary[a];
      coordinates.push(new google.maps.LatLng(obj.latitude, obj.longitude));
    }

  }
  console.log(coordinates);
}

在结束坐标仍将是[]而不是[{...},{...},...]。 我想这一定是带密封盖的问题

我怎么能在坐标阵列我想要的价值?

Answer 1:

这不是关门,而是使用JavaScript AJAX调用的异步性的问题。 当下AJAX调用响应到达(和你成功函数被调用,传播coordinates阵列)是这样,你该数组登录后-这在当时是空的。

我猜你想以某种方式返回coordinatesforeignCoordinatesArray()函数。 正如你所看到的,你不能使用return

function foreignCoordinatesArray(){
  var coordinates = [];
  $.getJSON('/critics.json?travel_id=' + $('#foreign_travel').val(), success);

  function success(ary) {
    //...
  }
  return coordinates;
}

相反,你应该通过将接收的回调函数coordinates

function foreignCoordinatesArray(coordinatesCallback){
  var coordinates = [];
  $.getJSON('/critics.json?travel_id=' + $('#foreign_travel').val(), success);

  function success(ary) {
    //...
    coordinatesCallback(coordinates);
  }
}

顺便说一句,你应该逃避$('#foreign_travel').val()使用它作为URL的一部分了。



Answer 2:

这个问题是不是与“倒闭潮”本身,而是与异步编程。 成功函数将不会被调用,直到JSON已被提取,这将几乎永远是你长后foreignCoordinatesArray()函数返回。 在一般情况下,当你使用像一个异步函数$.getJSON()回调之外的任何代码不应假定回调已经运行,因为这不是一般一个安全的假设。

在这种情况下的解决方案是您的移动console.log(coordinates)到成功的功能。



Answer 3:

回调后发生console.log()被执行。 如果移动console.log()到回调函数,你应该得到预期的输出。

function foreignCoordinatesArray(){

  var coordinates = [];
  $.getJSON('/critics.json?travel_id=' + $('#foreign_travel').val(), success);

  function success(ary) {
    for(var a in ary){
      var obj = ary[a];
      coordinates.push(new google.maps.LatLng(obj.latitude, obj.longitude));
    }
    console.log(coordinates);
  }

}


文章来源: Get variable from callback function