Javascript 如何在JQuery中从函数中获取值

Javascript 如何在JQuery中从函数中获取值,javascript,jquery,json,json.net,Javascript,Jquery,Json,Json.net,有人知道如何从包含getJSON的函数返回值吗 问题是我试图从另一个函数调用该函数以获得值 但它一直没有定义!!!! 我怎样才能让它工作 function TranslateLatLanToAddress(LatLng) { var latlng = "34.1574183,-118.437125"; var url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + lat

有人知道如何从包含getJSON的函数返回值吗 问题是我试图从另一个函数调用该函数以获得值 但它一直没有定义!!!! 我怎样才能让它工作

function TranslateLatLanToAddress(LatLng) {
            var latlng = "34.1574183,-118.437125";
            var url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + latlng + "&sensor=false";
            $ = jQuery;
            $.getJSON(url, function (data) {
                for (var i = 0; i < data.results.length; i++) {
                    var address = data.results[i].formatted_address;
                    //                 var address = data.results[i].address_components[4].long_name + data.results[i].address_components[6].short_name;
                    //alert(address);
                    //                alert(address);
                    return false;
                }
            });
        }



  function GetVal()
    {
    var retVal =TranslateLatLanToAddress(LatLng);
    alert(retVal); //Its undefined!!!
    }
函数translateLantLoadAddress(LatLng){
var latlng=“34.1574183,-118.437125”;
变量url=”http://maps.googleapis.com/maps/api/geocode/json?latlng=“+latlng+”&sensor=false”;
$=jQuery;
$.getJSON(url、函数(数据){
对于(var i=0;i
AJAX调用是异步的。这意味着,当请求被发送到服务器(谷歌地图)时,您的脚本将继续

这是一件好事,因为这意味着您的页面将在等待结果时继续加载

为了利用这一点,您可以使用
回调
方法

function TranslateLatLanToAddress(LatLng, fnCallback) {
    var latlng = "34.1574183,-118.437125";
    var url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + latlng + "&sensor=false";
    $ = jQuery;
    $.getJSON(url, function (data) {                                // getJSON is asynchronous
        for (var i = 0; i < data.results.length; i++) {
            var address = data.results[i].formatted_address;        // get the result
            fnCallback(address);                                    // execute the callback from the parameters
        }
    });
}


function GetVal() {
    TranslateLatLanToAddress(LatLng, function(address){             // note the new callback that takes an address as a parameter
        alert(address);                                             // the callback is fired from within the SUCCESS method and now address has a value
    });
}
函数translateLantLoadAddress(LatLng,fnCallback){
var latlng=“34.1574183,-118.437125”;
变量url=”http://maps.googleapis.com/maps/api/geocode/json?latlng=“+latlng+”&sensor=false”;
$=jQuery;
$.getJSON(url,函数(数据){//getJSON是异步的
对于(var i=0;i
AJAX是异步的,您所做的是(伪):

因此,您可以在AJAX get回调中调用函数:

$.getJSON(url, function (data) {
  // Other code here....
  alert( "AJAX DONE" ); // Or like: //  myCallbackFunction( data );
});

将所需的AJAX响应数据(如果需要)传递给
myCallbackFunction(数据)myCallbackFunction
只有在AJAX完成其工作后才会被调用。

$。getJSON使用的是XMLHTTPRequest,因此它自然是一个异步函数。最好分配一个回调函数来执行某些操作

function TranslateLatLanToAddress(LatLng) {
  var latlng = "34.1574183,-118.437125";
            var url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + latlng + "&sensor=false";
            $ = jQuery;
            $.getJSON( url, execute)
              .done(function() {
                console.log( "second success" );
              })
              .fail(function() {
                console.log( "error" );
              })
              .always(function() {
                console.log( "complete" );
              });
}

function execute(data) {
       for (var i = 0; i < data.results.length; i++) {
          console.log(data.results[i].formatted_address);
       }
}
函数translateLantLoadAddress(LatLng){
var latlng=“34.1574183,-118.437125”;
变量url=”http://maps.googleapis.com/maps/api/geocode/json?latlng=“+latlng+”&sensor=false”;
$=jQuery;
$.getJSON(url,执行)
.done(函数(){
console.log(“第二次成功”);
})
.fail(函数(){
控制台日志(“错误”);
})
.always(函数(){
控制台日志(“完成”);
});
}
函数执行(数据){
对于(var i=0;i

另外,$.getJSON还有另一个方便的回调(完成、失败、始终),您可以使用一些函数(如success callback)覆盖。

ajax
中的
A
表示异步,这意味着ajax调用是非阻塞的;当他们将控制权传递给下一行时,他们在后台工作。这被认为是ajax101。因此,当您检查返回的值时,ajax请求尚未完成。您建议我做什么?这取决于您想做什么。你真的没有很多选择;根据ajax请求的结果,您必须执行的任何操作,都可以在ajax回调中执行。或者您也可以准备好jQuery承诺或延迟。
function TranslateLatLanToAddress(LatLng) {
  var latlng = "34.1574183,-118.437125";
            var url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + latlng + "&sensor=false";
            $ = jQuery;
            $.getJSON( url, execute)
              .done(function() {
                console.log( "second success" );
              })
              .fail(function() {
                console.log( "error" );
              })
              .always(function() {
                console.log( "complete" );
              });
}

function execute(data) {
       for (var i = 0; i < data.results.length; i++) {
          console.log(data.results[i].formatted_address);
       }
}