如何在jQuery中从函数中获取值

e0bqpujr  于 2023-08-04  发布在  jQuery
关注(0)|答案(3)|浏览(106)

有人知道如何从包含$.getJSON的函数返回值吗?
问题是我试图从其他函数调用该函数以获取值,但它总是以undefined的形式返回!我怎么才能让它工作?

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

function GetVal() {
  var retVal =TranslateLatLanToAddress(LatLng);
  alert(retVal); // It's undefined!!!
}

字符串

siv3szwd

siv3szwd1#

AJAX 调用是异步的。这意味着当请求被发送到服务器(GoogleMap)时,您的脚本将继续。
这是一件好事,因为这意味着您的页面将在等待结果时继续加载。
要利用这一点,可以使用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
    });
}

字符串

kyvafyod

kyvafyod2#

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

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

字符串
所以你可以做的是在 AJAX get回调中调用一个函数:

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


将所需的 AJAX 响应数据(如果需要)传递给myCallbackFunction( data );,在任何情况下,只有在AJAX完成其工作后,才会调用fn myCallbackFunction

1wnzp6jl

1wnzp6jl3#

$.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还有另一个方便的回调(done,fail,always),您可以使用success callback之类的函数进行覆盖。

相关问题