2011-06-22 70 views
2

我感到非常愚蠢的問這個,但我怎麼能得到函數外部變量crdnts獲取函數(jQuery的)之外的JSON請求的變量

$(function() { 
    var coordinates = { 
     LoadDefault: function() { 
      $.getJSON('http://api.wipmania.com/jsonp?callback=?', '', function(json) { 
       var crdnts = json.latitude + "," + json.longitude; 
       //alert(crdnts);//this works 
       return crdnts; 
      }); 
     } 
    }; 
    alert(coordinates.LoadDefault());//I would like to get the crdnts variable here. 
}); 

+0

這是因爲Ajax是異步的。通常的做法是將alert()放入成功回調函數 –

回答

2

JavaScript的阿賈克斯是異步的。所以你需要使用回調:

$(function() { 
    var coordinates = { 
     LoadDefault: function() { 
      $.getJSON('http://api.wipmania.com/jsonp?callback=?', '', function(json) { 
       var crdnts = json.latitude + "," + json.longitude; 
       call_alert(crdnts); //callback 
      }); 
     } 
    }; 
    function call_alert(cr){ 
     alert(cr); 
    } 
    coordinates.LoadDefault(); 
}); 
+0

謝謝你正在尋找這個回調函數。我認爲,由於異步性質,這是不可能的,但我不知道如何做這個回調函數。 – Stofke

+0

@Stofke - 沒問題^ _ ^ – Neal

2

你不能。您的Ajax調用是異步的,所以您無法預測它何時會返回。

你可以做的唯一的事情就是在成功回調中用它做什麼,或者如果它是一個選擇(在這種情況下所有的JS執行都會等到請求完成),那麼set your Ajax to be synchronous

例如,你可以調用函數時的Ajax調用成功完成:

$(function() { 
    var coordinates = { 
     LoadDefault: function() { 
      $.getJSON('http://api.wipmania.com/jsonp?callback=?', '', function(json) { 
       var crdnts = json.latitude + "," + json.longitude; 
       callSomething(crdnts); 
      }); 
     } 
    }; 

    function callSomething(x) { 
     alert(x); 
    } 
});