怎么用JS递归发送AJAX请求

function onNetChange() {
        var nt = plus.networkinfo.getCurrentType();                //这个是监听网络信号
            if (nt == "2" || nt == "3" || nt == "5" || nt == "6") {
                mui.toast("在线模式");
                var tx = db.transaction("users", READ_WRITE);      //本地存储功能的代码
                var store = tx.objectStore("users");               //本地存储功能的代码
                var index = store.index("Ifnet");                  //本地存储功能的代码
                var req = index.openCursor(IDBKeyRange.only("1")); //本地存储功能的代码
                req.onsuccess = function(evt) {                    //本地查询后成功的方法
                    var res = evt.target.result;
                    if (res) {
                        var net = [res.value]
                        for (j = 0; j < net.length; j++) {
                            mui.ajax('http://XXXXX', {
                                data: {
                                    tugwork_s_id: net[j].TUGWORK_S_ID,
                                    IsMooring: net[j].If_mooring,
                                    IsPickup: net[j].ISPICKUP,
                                    godate: net[j].Godate,
                                    startdate: net[j].Startdate,
                                    enddate: net[j].Enddate,
                                    backdate: net[j].Backdate
                                },
                                dataType: 'json',
                                type: 'post', 
                                timeout: 5000, 
                                success: function(res) {
                                    console.log(JSON.stringify(res));
                                },
                                error: function(xhr, type, errorThrown) {
                                    console.log('Update_local');
                                }
                            });
                        }
                        res.continue(); //这个是本地存储的游标下移,如果不写这个就能查出来一条
                    }
                };
                req.onerror = function(evt) {                      //本地查询后失败的方法
                console.error("UpData error:", evt.target.errorCode || evt.target.error);
                };
                                                
            } 
            else {
                mui.toast("离线模式");
            }                
      }                
            
            
            
            

代码就是这个样子,我这么写发送AJAX非常的混乱。虽然数据保存成功了。我想写一个递归的方法但是不知道应该怎么写。请哪位大神帮我看看我应该如何把这个for循环变成递归的写法。就比如说我本地查询到3条符合标准的数据。然后我就发送3次AJAX请求。目前不考虑失败的情况。默认理想情况下都是成功的。

阅读 4k
2 个回答

递归实现的话感觉还是要用一个累加变量作为终止发送请求的标记,和你写的循环的道理差不多

if (res) {
  var j = 0
  function request (){
    mui.ajax('http://XXXXX', {
     data: {
       tugwork_s_id: net[j].TUGWORK_S_ID,
       IsMooring: net[j].If_mooring,
       IsPickup: net[j].ISPICKUP,
       godate: net[j].Godate,
       startdate: net[j].Startdate,
       enddate: net[j].Enddate,
       backdate: net[j].Backdate
     },
       dataType: 'json',
       type: 'post', 
       timeout: 5000, 
       success: function(res) {
         console.log(JSON.stringify(res));
       },
       error: function(xhr, type, errorThrown) {
         console.log('Update_local');
       }
    });
    j++
    if (j < net.length) {
      request ()
    }  
  }
  // 调用函数开始递归
  request ()

}

解决了写一个我自己的
没有想象的那么困难是我自己想复杂了

function onNetChange() {
            var nt = plus.networkinfo.getCurrentType();
            if (nt == "2" || nt == "3" || nt == "5" || nt == "6") {
                mui.toast("在线模式");
                plus.device.vibrate();
                s = plus.audio.createPlayer("../audio/NetYes.mp3");
                var num = s.getDuration(); //获取音频总长度number 
                setTimeout(function() { //延时获取,否则可能没有返回长度 
                    var num = s.getDuration();
                    // alert(num)
                }, 100)

                s.play(function() { //播放完成回调 
                    // alert("Audio play success!");
                }, function(e) { //失败回调 
                    // alert("Audio play error: " + e.message);
                });
                var tx = db.transaction("users", READ_WRITE);
                var store = tx.objectStore("users");
                var index = store.index("Ifnet");
                var req = index.openCursor(IDBKeyRange.only("1"));
                var odiv = document.getElementById("tijiao");
                if (odiv.style.display = "none") {
                    odiv.style.display = "block";
                } 
                req.onsuccess = function(evt) {
                    var res = evt.target.result;
                    if (res) {
                        var net = [res.value]
                        var j = 0;
                        function submit(){
                            if(j>=net.length){ 
                               return;
                            }
                            mui.ajax('http://', {
                                data: {
                                    tugwork_s_id: net[j].TUGWORK_S_ID,
                                    IsMooring: net[j].If_mooring,
                                    IsPickup: net[j].ISPICKUP,
                                    godate: net[j].Godate,
                                    startdate: net[j].Startdate,
                                    enddate: net[j].Enddate,
                                    backdate: net[j].Backdate
                                },
                                dataType: 'json', //服务器返回json格式数据
                                type: 'post', //HTTP请求类型
                                timeout: 5000, //超时时间设置为10秒;
                                success: function(req) {
                                    console.log(JSON.stringify(req));
                                    j++;
                                    submit();
                                },
                                error: function(xhr, type, errorThrown) {
                                    console.log('Update_local');
                                }
                            });                                
                        }
                        submit();
                        res.continue();
                    }
                };
                req.onerror = function(evt) {
                    console.error("UpData error:", evt.target.errorCode || evt.target.error);
                };
                setTimeout(function(){odiv.style.display = "none";}, 3000);                                        
            } else {
                mui.toast("离线模式");
                plus.device.vibrate();
                s = plus.audio.createPlayer("../audio/NetNo.mp3");
                var num = s.getDuration(); //获取音频总长度number 
                setTimeout(function() { //延时获取,否则可能没有返回长度 
                    var num = s.getDuration();
                    // alert(num)
                }, 100)

                s.play(function() { //播放完成回调 
                    // alert("Audio play success!");
                }, function(e) { //失败回调 
                    // alert("Audio play error: " + e.message);
                });
            }
        }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题