gal*_*ong -1 javascript ajax jquery google-maps scope
出于某种原因,我无法访问变量.可能是范围问题,或时间问题,无法找到它.这是我的简化代码:
var endResult = "";
//function loads html into given element.Called as a callback later when google maps direction service is done//
function getResults(){
$.ajax({
url:'foo.php',
data: endResult,
//etc., response loaded asynchronously in div element//
});
}
//when form is submitted
$('#form').submit(function(){
var endResult = "";
//get form data, define variable//
$.post('bar.php',function(data){
var location = data;
//initialize Maps Directions Service//
var directionService = new google.maps.DirectionsService();
//function gets directions, and loads a single value into global variable "endResult"//
function calcRoute(){
var request = {//google maps arguments containing form data//};
directionsService.route(request, function(result, status) {
var endResult = JSON.stringify(result.routes[0].legs[0].distance.value);
console.log(endResult); //Outputs intended value from google maps//
//run function as a callback making sure that "endResult" is not null//
getResults(); //iside this function - value of "endResult" is null, data sent to foo.php is null//
});
}
calcRoute();
}
return false;
});
Run Code Online (Sandbox Code Playgroud)
就是这样,一旦我调用了getResults(),在该函数内部,endResult将为null.我确信这很简单,但我无法理解它.
你没有分配给全局变量,因为你有
var endResult = "";
// ^^^
Run Code Online (Sandbox Code Playgroud)
在提交处理程序中,和
var endResult = JSON.stringify(result.routes[0].legs[0].distance.value);
// ^^^
Run Code Online (Sandbox Code Playgroud)
...在calcRoute.
那些在这些函数中声明局部变量,这些变量会影响全局变量(阴影中的变量会影响calcRoute提交处理程序中的变量).
只需删除那些var,所以你要分配代码关闭的变量(全局).
通常,避免使用真正的全局变量,并最小化函数具有副作用的程度(例如分配和读取它们关闭的变量).在这种情况下,endResult没有理由calcRoute不能将其getResults作为一个参数传递给全局.
| 归档时间: |
|
| 查看次数: |
451 次 |
| 最近记录: |