javascript - 代码在 API 响应之前执行

标签 javascript ajax api response

我有一个调用 Google Geocoder API 来获取纬度和经度的函数。问题在于,在依赖于响应的代码执行完毕之后,响应来得太晚了。

这是我当前的代码。

var prmList = '';
prmList += '{"Empty":"","Criteria":""}';

$.ajax({
    type: "POST",
    url: window.location.pathname + "/GetAddress",
    data: prmList,
    async: false,
    cache: true,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (msg) {
        var Alladd = eval('(' + msg.d + ')');
        var itemcount = Alladd.returnAddressList.length;

        if (itemcount > 0) {
            for (i = 0; i < itemcount; i++) {
                var geocoder = new google.maps.Geocoder();

                geocoder.geocode({
                    'address': Alladd.returnAddressList[i].Street + "," +
                               Alladd.returnAddressList[i].City + "," +
                               Alladd.returnAddressList[i].State + "," +
                               Alladd.returnAddressList[i].Country
                }, function (results, status) {
                    if (status == google.maps.GeocoderStatus.OK) {
                        var marker = new google.maps.Marker({
                            position: results[0].geometry.location,
                            draggable: true,
                            icon: markerImage
                        });

                        markers.push(marker);
                    }
                });
            }

            var zoom = parseInt(-1, 10);
            var size = parseInt(-1, 10);
            var style = parseInt(-1, 10);

            zoom = zoom == -1 ? null : zoom;
            size = size == -1 ? null : size;
            style = style == -1 ? null : style;

            markerClusterer = new MarkerClusterer(map, markers, {
                maxZoom: zoom,
                gridSize: size,
                styles: styles[style]
            });
        }
    },

    error: AjaxFailed
});

最佳答案

首先,请格式化您的代码。

其次,你的代码在响应之前执行是什么意思?如果它依赖于 $.ajax 调用的返回,只需将该函数包含在 success 延续中即可。

啊,我想我明白你的问题 -

试试这个:

var itemcount = Alladd.returnAddressList.length;
if (itemcount > 0) {                           
    for (i = 0; i < itemcount; i++) {
        var geocoder = new google.maps.Geocoder();
        geocoder.geocode({
            'address': Alladd.returnAddressList[i].Street + "," + <br>Alladd.returnAddressList[i].City + "," + Alladd.returnAddressList[i].State + "," + Alladd.returnAddressList[i].Country
            }, function (results, status) {                                   
               if (status == google.maps.GeocoderStatus.OK) {
                   var marker = new google.maps.Marker({
                       position: results[0].geometry.location,
                       draggable: true,
                       icon: markerImage
                });
                markers.push(marker); 
                if(i == itemcount-1)
                {
                    var zoom = parseInt(-1, 10);
                    var size = parseInt(-1, 10);
                    var style = parseInt(-1, 10);
                    zoom = zoom == -1 ? null : zoom;
                    size = size == -1 ? null : size;
                    style = style == -1 ? null : style;               
                    markerClusterer = new MarkerClusterer(map, markers, {
                    maxZoom: zoom,
                    gridSize: size,
                    styles: styles[style]
               });
              }                                 
                                   }
                               });
                           }

                   }

您遇到的问题是您在运行脚本之前没有等待所有异步调用返回。此更改可确保您在继续操作之前获得最终的预期响应。

话虽如此,您可能想要引入一些错误检查 - 如果未返回响应或收到错误代码会发生什么?这些情况都应该检查。

关于javascript - 代码在 API 响应之前执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5659001/

相关文章:

javascript - Mootools Request.HTML 返回未定义

javascript - 从 jQuery + AJAX 请求中选择时,IE8 返回 NULL

javascript - 如何获取我的页面上每个帖子的 id?

ruby - 使用 Twitter Oauth 进行服务认证

javascript - jQuery each() 第一次迭代是错误的,其余的都是正确的

javascript - Jasny Bootstrap offcanvas 菜单 - ajax 'close' 导致关闭问题

Javascript函数在服务器上写入数据

api - 在 Postman 中使用路径参数测试 WCF API

java - 在 API 中捆绑数据库

javascript - 是否可以从firebase云函数node.js更新firestore中的map类型字段?