http 请求失败后重试

3,014 阅读1分钟

http请求失败后重试需要考虑请求时间间隔,请求次数

/*
* url 请求地址
* method 请求方法
* data 请求参数
* fnSucceed 成功的回调
* fnFail失败的回调
*/
function ajaxPost (url ,method, data , fnSucceed , fnFail) {
    //请求时间间隔,刚开始间隔时间短,后面间隔时间越来越长
    let timeGaps = 1000;
    //请求重试次数
    let retryNum = 10;
    var ajax = new XMLHttpRequest();
    ajax.open( method , url , true );
    ajax.setRequestHeader( "Content-Type" , "application/x-www-form-urlencoded" );
    ajax.onreadystatechange = function () {
        if( ajax.readyState == 4 ) {
            if( ajax.status == 200 ) {
                fnSucceed( ajax.responseText );
            }
            else {
                fnFail( "HTTP请求错误!错误码:"+ajax.status );
                if(retryNum > 0 ){
               		 // 异常,重试
               		 setTimeout(function(){
               		    retryNum--;
                	    ajaxPost(url ,method, data , fnSucceed , fnFail)
               		 },timeGaps)
                }
            }
        }
        else {
        }
    }
    ajax.send( data );
}