如何从JQuery函数中获取值

时间:2014-06-12 01:12:05

标签: 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=" + 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!!!
    }

3 个答案:

答案 0 :(得分:1)

AJAX调用是异步的。这意味着,当请求被发送到服务器(Google地图)时,您的脚本将继续。

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

为了您的利益,您可以使用callback方法。

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
    });
}

答案 1 :(得分:1)

AJAX是异步的,你正在做的是(伪):

[call TranslateLatLanToAddress]
    |
    + ----which triggers an ajax call---[ AJAX response ]
    + ----Get here the AJAX response?          |
                                               +--- Now is available!

所以你可以做的是在AJAX get callback中调用一个函数:

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

将所需的AJAX响应数据(如果需要)传递给myCallbackFunction( data );,无论如何只有在AJAX完成它之后才会调用你的fn myCallbackFunction

答案 2 :(得分:0)

$ .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);
       }
}

$ .getJSON还有另一个方便的回调(完成,失败,总是)你可以用一些函数覆盖,比如成功回调。