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

标签 javascript jquery ajax rest leaflet

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

我有一个函数可以对一系列结果进行交互,并且我正在尝试显示我传递到该变量中的十进制度坐标的三词地址名称。

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

最佳答案

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

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

关于javascript - ajax GET 函数在被另一个函数调用时不返回成功值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49494792/

相关文章:

javascript - 检查用户是否具有任何列出的所需权限

javascript - 使用 javascript 从动态表中删除记录

javascript - 添加后,从下拉菜单中删除一个值并显示下一个值,删除后,再次将删除的值添加到下拉菜单中

javascript - 在没有 Internet Explorer 关闭框的情况下添加选项以选择框?

c# - C# 中单个按钮有两个操作的弹出消息

javascript - 到达路由器更改 URL,不更新 View

javascript - 等待 promise ?

javascript - 将 javascript 变量传递给 php,然后返回 html

asp.net - 具有多个更新面板的更新面板动画扩展器

javascript - 在 Angular 中使用 Observable 时如何将函数附加到观察者?