XMLHttpRequest请求携带cookie问题

如今开发过程当中,大部分都是使用的框架,对于框架封装好的东西使用起来着实很方便,可是也有一丢丢弊端,就是常常会忽略一些本质上的东西,近期开发中就遇到了一个基础的问题。json

说下开发背景,已经上线的VUE搭建的系统后台,产品提出要给网站加一个首页,纯静态页展示一下平台都有哪些功能,而后有一个登陆态和一个平台入口。bash

因为项目总体架构的问题,这个静态页至关因而单独出来的东西,没法使用框架内部封装好的各类方法,因此登陆请求就是用了原生的XMLHttpRequest方法,简单的写个方法cookie

function timedGetText( url, callback ){
    var request = new XMLHttpRequest();    
    request.open( "GET", url );
    request.responseType = 'json' 
    request.onreadystatechange = function(){ 
        if( request.readyState !== 4 ) return;        
        if( request.status === 200 ){
            callback( request.response );
        } 
    }
    request.send( null )
}复制代码

发送请求获取用户信息,能取到用户信息则展现到页面,没有登陆态则跳转登陆页架构

var loginIn = 'www.aa.com/login?ReturnUrl=' + window.location.href
timedGetText(getUrl, function(res){
    if(res.success){ 
        var users = res.data.name
        userName.innerHTML = users
    }else if(res.resultCode == '-100'){
        window.location.href = loginIn
        return false    
    }else{ 
        console.log(res.resultTips)    
    }
})复制代码

代码逻辑很简单,页面加载未登陆直接跳转登陆页,输入帐号密码后返回当前页面,而后问题就出现了,返回页面后无限跳登陆页进入了死循环  😌😌😔框架

通过反复检查,代码逻辑没有问题,跳转路径也ok的,并无发现什么问题。只能请教大佬,大佬看了看控制台,最终发现问题,使用的是原生的XMLHttpRequest方法,在登陆成功后,登陆态没有拿到,也就是请求的时候没有携带相应的cookie,所以才会循环发送登陆请求。网站

原生方法请求携带cookie方法也有不少,好比用一个隐藏图片的src去请求,也能够在XMLHttpRequest请求头添加一个字段,此处才用第二种方法ui

function timedGetText( url, callback ){
    var request = new XMLHttpRequest();    
    request.open( "GET", url );
    request.withCredentials = true
    request.responseType = 'json' 
    request.onreadystatechange = function(){ 
        if( request.readyState !== 4 ) return;        
        if( request.status === 200 ){
            callback( request.response );
        } 
    }
    request.send( null )
}复制代码

问题解决,并且解决办法并不复杂。由此问题引起思考,原生的基础真的很重要!url

相关文章
相关标签/搜索