3

我正在尝试调用 .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
4

2 回答 2

3

我不记得这叫什么,但这是一个时间问题。getJson 是异步的。因此,您的 javascript 在 JSON 请求甚至可以返回之前处理 JSON 请求之后的部分。您需要在完整函数中调用一个函数并将其传入。

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.
}
于 2013-03-01T22:19:34.157 回答
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];
      });
   }
于 2013-03-01T22:20:14.530 回答