记一次奇怪的问题-----ajax发起post请求后面紧跟着重定向,ajax未执行(已解决,待深究原因)

前端退出触发方法,一方面ajax调用后台记录日期,清理回话数据等,另一方法重定向到登录画面

function doSignOff(){ 
   var language = "<%= language %>" ;
   if(!window.confirm('<liana:I18N name="您确定要退出吗"/>')){
      return;
    }
   sendAjaxRequest('post','<%=utb.getURL("signOut.do")%>','',signOutTurnPage);
   if(language==null||language==""||language=="ZH_CN"){
       window.location.href ='<%= webAppPath %>';   
   }else if(language=="EN_US"){
       window.location.href ='<%= webAppPath %>' + 'index_EN_US.html';
   }else{
       window.location.href ='<%= webAppPath %>';
   } 
}

ajax集成方法如下

function sendAjaxRequest( method, url, params, callbackFunction, waitFunction ){

    params = params + "&responseFormat=JSON";
    params = params + "&random="+Math.random();
    params = encodeURI(params);
    var config = {
        method:method,
        data:params,
        uri:url,
        success:callbackFunction
    }
    if(waitFunction==null)
        config.wait = function(){};
    else
        config.wait = waitFunction;
    
    sendAjaxRequestYUI(config);
}
function sendAjaxRequestYUI(config){
    

    YUI().use("io-base","json-parse", function(Y) {
        // Define a function to handle the response data.
        var c = {
            method:config.method,
            data:config.data,
            on:{
                success:success,
                start:start,
                complete:complete
            },
            sync:config.sync
        }
        function success(id, o, args) {
            
            var id = id; // Transaction ID.
            var data = o.responseText; // Response data.
           
            var context = Y.JSON.parse(data);
            if(context.ec){
                context.errorCode = context.ec;
            }
            if(context.em){
                context.errorMessage = context.em;
            }
            config.success(context);
        };
        function start()
        {
            config.wait(true);
        }
        function complete()
        {
            config.wait(false);
        }
        var request = Y.io(config.uri,c);
    });
}

但是前端执行退出时,F12和后台断点并没有记录或捕获到异步请求,所以断定未发起请求,最后解决如下

function doSignOff(){ 
   var language = "<%= language %>" ;
   if(!window.confirm('<liana:I18N name="您确定要退出吗"/>')){
      return;
    }
   sendAjaxRequest('post','<%=utb.getURL("signOut.do")%>','',signOutTurnPage);
   setTimeout(() => {
       if(language==null||language==""||language=="ZH_CN"){
           window.location.href ='<%= webAppPath %>';   
       }else if(language=="EN_US"){
           window.location.href ='<%= webAppPath %>' + 'index_EN_US.html';
       }else{
           window.location.href ='<%= webAppPath %>';
       } 
          // 等待50毫秒
     }, 50);
}

一开始在ajax方法发起的下方插入一个ajax,发现可以正常发起异步请求记录,所以就延迟执行后面的重定向方法,解决问题。

但是是什么原因导致的有待深究!记录一下,备考。

posted @ 2020-06-04 14:42  陌上金丸看落羽  阅读(372)  评论(0编辑  收藏  举报