ajax GET函数在被另一个函数调用时不返回成功值

时间:2018-03-26 15:09:42

标签: javascript jquery ajax rest leaflet

当console.log返回正确的答案时,有人可以告诉我为什么返回的值是空白的吗?

我有一个函数通过一系列结果进行交互,我试图显示我传入此变量的十进制度坐标的what3words名称。

$.each(data.d.results, function (index, item) {
    var whatThreeWords = fnWhatThreeWords(item.Latitude,item.Longitude);
    //other code here to plot via leaflet
});

我的fnWhatThreeWords看起来像:

function fnWhatThreeWords(Lat,Lng) {
    var whatThreeWords = "";
    $.ajax({
        type: "GET",
        dataType: "json",
        url: "https://api.what3words.com/v2/reverse?coords="+Lat+","+Lng+"&key=APIKEY&lang=en&format=json",
        error: function (err) {
            console.log(err);
        },
        success: function (data, status, xhr) {
            console.log(data.words);
            whatThreeWords = data.words;
        }
    });
    return whatThreeWords;
}

console.log返回相应的响应:“crumples.harmlessly.measuring”但是当我返回whatThreeWords全局函数变量时,结果为空;

var point = new L.marker([item.Latitude, item.Longitude], {icon: color}).bindPopup("<b>Residence "+Edit+"</b><br>RPA Id: "+item.RPAId+"<br>"+item.Address+"<br>what3words: "+whatThreeWords, {autoClose:false});

1 个答案:

答案 0 :(得分:1)

要在ajax请求之外操作whatThreeWords变量,您可以为async设置额外的参数$.ajax()。但是,防止js中的异步代码确实是一种不好的做法。 我建议的是在你分配给success属性的回调中使用result。这是正确的做法。

如果要在其他异步内容中生成更多异步内容以避免回调,请使用Promises组织代码并使其更具可读性,因为它看起来像是同步的。