在.getJSON函数之外调用变量?

时间:2013-03-01 22:15:12

标签: jquery getjson

我试图调用.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

2 个答案:

答案 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];
      });
   }