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);
}
在结束坐标仍将是[]而不是[{...},{...},...]。 我想这一定是带密封盖的问题
我怎么能在坐标阵列我想要的价值?
这不是关门,而是使用JavaScript AJAX调用的异步性的问题。 当下AJAX调用响应到达(和你成功函数被调用,传播coordinates
阵列)是这样,你该数组登录后-这在当时是空的。
我猜你想以某种方式返回coordinates
从foreignCoordinatesArray()
函数。 正如你所看到的,你不能使用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的一部分了。
这个问题是不是与“倒闭潮”本身,而是与异步编程。 成功函数将不会被调用,直到JSON已被提取,这将几乎永远是你长后foreignCoordinatesArray()
函数返回。 在一般情况下,当你使用像一个异步函数$.getJSON()
回调之外的任何代码不应假定回调已经运行,因为这不是一般一个安全的假设。
在这种情况下的解决方案是您的移动console.log(coordinates)
到成功的功能。
回调后发生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);
}
}