Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从回调函数获取变量_Javascript_Ajax_Callback_Closures - Fatal编程技术网

Javascript 从回调函数获取变量

Javascript 从回调函数获取变量,javascript,ajax,callback,closures,Javascript,Ajax,Callback,Closures,在末尾,坐标仍然是[],而不是[{…},{…},…]。 我想这一定是闭包的问题 如何在坐标数组中获得所需的值?闭包没有问题,但JavaScript AJAX调用的异步特性有问题。AJAX调用响应到达并调用success函数的那一刻,传播坐标数组就是在您登录该数组之后的一段时间,当时该数组是空的 我猜你想从foreignCoordinateArray函数返回坐标。如您所见,您不能使用return: 相反,您应该传递一个回调函数,该函数将接收坐标: 顺便说一句,在将$'foreign_travel'

在末尾,坐标仍然是[],而不是[{…},{…},…]。 我想这一定是闭包的问题


如何在坐标数组中获得所需的值?

闭包没有问题,但JavaScript AJAX调用的异步特性有问题。AJAX调用响应到达并调用success函数的那一刻,传播坐标数组就是在您登录该数组之后的一段时间,当时该数组是空的

我猜你想从foreignCoordinateArray函数返回坐标。如您所见,您不能使用return:

相反,您应该传递一个回调函数,该函数将接收坐标:


顺便说一句,在将$'foreign_travel'.val用作URL的一部分之前,应该先将其转义。

闭包不是问题,而是JavaScript AJAX调用的异步性质。AJAX调用响应到达并调用success函数的那一刻,传播坐标数组就是在您登录该数组之后的一段时间,当时该数组是空的

我猜你想从foreignCoordinateArray函数返回坐标。如您所见,您不能使用return:

相反,您应该传递一个回调函数,该函数将接收坐标:


顺便说一句,在将$'foreign_travel'.val用作URL的一部分之前,应先将其转义。

执行console.log后,将发生回调。如果将console.log移动到回调函数中,则应获得预期的输出

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

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

回调是在执行console.log之后发生的。如果将console.log移动到回调函数中,则应获得预期的输出

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

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

问题不在于闭包本身,而在于异步编程。在获取JSON之前不会调用success函数,这通常在您的foreignCoordinateArray函数返回之后很长一段时间。通常,当您使用像$.getJSON这样的异步函数时,回调之外的任何代码都不应该假设回调已经运行,因为这通常不是一个安全的假设


这种情况下的解决方案是将console.logcoordinates移到success函数中。

问题不在于闭包本身,而在于异步编程。在获取JSON之前不会调用success函数,这通常在您的foreignCoordinateArray函数返回之后很长一段时间。通常,当您使用像$.getJSON这样的异步函数时,回调之外的任何代码都不应该假设回调已经运行,因为这通常不是一个安全的假设


这种情况下的解决方案是将console.logcoordinates移到success函数中。

在success函数中尝试console.log在success函数中尝试console.log谢谢!这就是我要找的。谢谢!这就是我要找的。
function foreignCoordinatesArray(coordinatesCallback){
  var coordinates = [];
  $.getJSON('/critics.json?travel_id=' + $('#foreign_travel').val(), success);

  function success(ary) {
    //...
    coordinatesCallback(coordinates);
  }
}
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);
  }

}