多次异步请求调用ajax,让返回值按特定顺序来返回

来源:互联网 发布:java特种兵 pdf完整版 编辑:程序博客网 时间:2024/06/05 11:09

1.  自己写代码来控制执行循序,而不是直接for,each并发执行,做递归调用

 以高德地图 逆地理编码 为例

参考网址:http://lbs.amap.com/api/webservice/guide/api/georegeo/

参考例子:http://lbs.amap.com/api/javascript-api/example/geocoder/regeocoding

<script type="text/javascript">
    
    var mapObj;
    var MGeocoder;
    var marker = [];    
    function mapInit() {
        mapObj = new AMap.Map('iCenter');    //默认定位:初始化加载地图时,center及level属性缺省,地图默认显示用户所在城市范围
    };   
    var addressStr = "";

    //坐标转地址
    function setData() {
        addressStr = "";
        var json = [{ "lngX": "117.1419139142", "latY": "39.1157409540" }, { "lngX": "117.183078", "latY": "39.121749" }, { "lngX": "117.181942", "latY": "39.122237" }];
        var jsonArray = [];
        for (var i = 0 ; i < json.length; i++) {
            jsonArray[i] = json[i];
        }
        geocoder3(0, jsonArray);
    };


    function geocoder3(index,jsonObj) {
        var getlngX = parseFloat(jsonObj[index].lngX); //
        var getlatY = parseFloat(jsonObj[index].latY); //
        var arr_dingwei = GPS.gcj_encrypt(getlatY, getlngX); //定位,将gps坐标转成火星坐标
        getlngX = arr_dingwei.lon.toFixed(6);
        getlatY = arr_dingwei.lat.toFixed(6);
        var lnglatXY = new AMap.LngLat(getlngX, getlatY);
        mapObj.plugin(["AMap.Geocoder"], function () {
            MGeocoder = new AMap.Geocoder({
                city: "010" //城市,默认:“全国” 
            });
            //返回逆地理编码结果
            AMap.event.addListener(MGeocoder, "complete", getAddress_CallBack);
            //逆地理编码
            MGeocoder.getAddress(lnglatXY);                        
        });
        ////加点
        var marker = new AMap.Marker({
            map: mapObj,
            icon: "http://webapi.amap.com/images/0.png",
            position: lnglatXY,
            offset: new AMap.Pixel(-5, -30)
        });
        mapObj.setFitView();
        //
        setTimeout(function () {
            index++;
            if (index < jsonObj.length) { geocoder3(index, jsonObj); } //递归调用
            if (index === jsonObj.length) {
                setTimeout(function () {
                    console.log(addressStr);
                }, 50);
            }
        },50);
        
    }


    var i = 0;
    //回调函数  
    function getAddress_CallBack(data) {        
        i++;
        var resultStr = ""; 
        var address;
        //返回地址描述
        address = data.regeocode.formattedAddress;
        //alert(address);
        addressStr += address+",";
        
        //返回地址 结果拼接输出
        resultStr = "<div style=\"font-size: 12px;padding:0px 0 4px 2px; border-bottom:1px solid #C1FFC1;\">" + "<b>地址</b>:" +i + address + "</div>";
        
        $("#result").append(resultStr);
        
    }

</script>

原创粉丝点击