我试图调用.getJSON函数之外的变量。我在.getJSON函数之外声明它,然后在.getJSON函数内为其赋值。但是,当我尝试将其拉出后,它表示它是空的(当我在控制台日志中可以看到它内部有信息时)。这是代码:
function calcRoute() {
var start = document.getElementById('start').value;
var end = document.getElementById('end').value;
var waypts = [];
$.getJSON("/westcoast_map.php", // The server URL
{ westcoast_id : $('.opener').data('westcoast_id') }, // Data you want to pass to the server.
function(json) {
waypts = json[1];
console.log(waypts); //prints out full array
});
console.log(waypts); //prints out an empty array
答案 0 :(得分:2)
我不记得这叫什么,但这是一个时间问题。 getJson是异步的。因此,在JSON请求甚至可以返回之前,您的javascript会在JSON请求之后处理该部分。您需要调用complete函数内的函数并将其传入。
var waypts = [];
$.getJSON("/westcoast_map.php", // The server URL
{ westcoast_id : $('.opener').data('westcoast_id') }, // Data you want to pass to the server.
function(json) {
waypts = json[1];
console.log(waypts); //prints out full array
runCodeAfter();
});
function runCodeAfter(){
console.log(waypts); //should print out full array.
}
答案 1 :(得分:1)
在JavaScript中,变量的范围仅在函数内有效,因此您无法访问函数calcRoute之外的变量waypts。
如果你想这样做,你必须在函数外面声明变量waypts。
编辑:
如果你在收到来自ajax调用的响应后不想执行某些操作,你可以使用jQuery执行此操作:
function calcRoute() {
var start = document.getElementById('start').value;
var end = document.getElementById('end').value;
var waypts = [];
var data = $.getJSON("/westcoast_map.php",
{ westcoast_id : $('.opener').data('westcoast_id') });
$.when(data).then(function(theData){
waypts = theData[1];
});
}