ajax 302 오류 점프 불가

22851 단어 10_jquery11_js
1. 문 제 는 카 스 로그 인 에 실패 한 후에 ajax 요청 을 계속 실행 하면 302 리 셋 오 류 를 보고 할 수 있 습 니 다. 그러나 ajax 요청 이기 때문에 브 라 우 저 는 자동 으로 이동 하지 않 고 처리 해 야 합 니 다.
1. 스스로 ajax 재 작성 방법: 추천 하지 않 음
var Ajax = function() {
    var that = this;
    //           
    that.createXHR = function() {
        if (window.XMLHttpRequest) { // IE7+、Firefox、Opera、Chrome  Safari
            return new XMLHttpRequest();
        } else if (window.ActiveXObject) { // IE6    
            var versions = [ 'MSXML2.XMLHttp', 'Microsoft.XMLHTTP' ];
            for (var i = 0, len = versions.length; i < len; i++) {
                try {
                    return new ActiveXObject(version[i]);
                    break;
                } catch (e) {
                    //   
                }
            }
        } else {
            throw new Error('      XHR  !');
        }
    }
    //        
    that.init = function(obj) {
        //      
        var objAdapter = {
            method : 'get',
            data : {},
            success : function() {
            },
            complete : function() {
            },
            error : function(s) {
                alert('status:' + s + 'error!');
            },
            async : true
        }
        //     JS       IE               
        that.url = obj.url + '?rand=' + Math.random();
        that.method = obj.method || objAdapter.method;
        that.data = that.params(obj.data) || that.params(objAdapter.data);
        that.async = obj.async || objAdapter.async;
        that.complete = obj.complete || objAdapter.complete;
        that.success = obj.success || objAdapter.success;
        that.error = obj.error || objAdapter.error;
    }
    // get  
    that.get = function(obj) {
        var xhr = that.createXHR(); //   XHR  
        that.init(obj);
        if (that.async === true) { // true    ,false    
            //          ,    readystatechange   
            xhr.onreadystatechange = function() {
                if (xhr.readyState == 4) { //              
                    that.callback(obj, this); //   
                }
            };
        }
        //   GET  ,      url  
        that.url += that.url.indexOf('?') == -1 ? '?' + that.data : '&'
            + that.data;
        //    XHR   ,     open()  ,
        //        :    (get、post)、   URL       。
        xhr.open(that.method, that.url, that.async);
        xhr.send(null); // get    null
        if (that.async === false) { //   
            that.callback(obj, this); //   
        }
    }
    //      ,    
    that.callback = function(obj, xhr) {
        console.log("ajax   http code :" + xhr.status)
        if (xhr.status == 200) { //   http       ,200    
            obj.success(xhr.responseText); //       
        } else {
          //                 
            console.log('      !    :' + xhr.status + ',    :' + xhr.statusText);
            top.location.href = "/home";
        }
    }
    //     
    that.params = function(data) {
        var arr = [];
        for ( var i in data) {
            //                encodeURIComponent()      
            arr.push(encodeURIComponent(i) + '=' + encodeURIComponent(data[i]));
        }
        return arr.join('&');
    }
    return {
        get : that.get,
    }
}

이 항목 은 자체 적 으로 jquery 의 ajax 요청 을 사용 합 니 다. 모든 요청 이 제 가 정의 한 ajax 세트 로 302 를 처리 하면 운동량 이 비교적 많 기 때문에 jquery 의 ajax 를 계속 사용 하 는 것 을 선택 하면 이 잘못된 문 제 를 어떻게 처리 합 니까?
ajax 는 우리 에 게 ajax Setup 방법 을 제공 합 니 다. 리 셋 을 예비 처리 할 수 있 습 니 다. 우 리 는 이 방법 만 복사 하면 ajax 의 반환 값 의 논 리 를 처리 할 수 있 습 니 다. 코드 는 다음 과 같 습 니 다.
/**
 *    ajax 302     
 */
$.ajaxSetup({
    //    ,   get
    type:'post',
    //       
    success: function () {
        console.log('  ')
    },
    //          
    error: function () {
        console.log('  ')
    },
    //       。  success error     
    complete: function (XMLHttpRequest,status) {
        if(status === 'error'){
        	//      ,      error            
        	//     top    iframe    ,         
            top.location.href = "/home";
        }
    },
})

좋은 웹페이지 즐겨찾기