《前端JavaScript面试技巧》学习笔记( 8 ) Ajax

2017-09-21  本文已影响64人  一杯浊酒

问题

手动编写一个 ajax ,不依赖第三方库
跨域的几种实现方式

知识点

1: XMLHttpRequestajax 的核心 API
2: 状态码说明
3: 跨域


var xhr = new XMLHttpRequest(); //创建xhr对象
xhr.open('GET','/api',false);
xhr.onreadystatechange = function() {
    //这里的函数异步执行,可以参考之前js基础中的 异步模块
    if (xhr.readyState == 4) { //状态的变化
        if (xhr.status == 200) { //服务端返回的状态码
            console.log(responseText) //服务端返回的内容
        }
    }
}
xhr.send(null)

IE 低版本使用 ActiveObject, 跟 W3C 标准不一样


xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) { //状态的变化
        if (xhr.status == 200) { //服务端返回的状态码
            console.log(responseText) //服务端返回的内容
        }
    }
}

每次readyState 变化的时候,都会触发onreadystatechange 函数的执行
readyState

status http状态码


可以跨域加载资源的三个标签

三个标签的场景

<script>
window.callback=function(data){
//这是我们跨域得到的信息
console.log(data);
}
</script>
<script src='http://coding.m.imooc.com/api.js'></script>
<!-- 以上将返回callback({x:100,y:200}) -->

服务端设置http header
另外一个解决跨域的简单方法,需要服务器端来做,但是作为交互方,我们必须知道这个方法,是将来解决跨域问题的一个趋势

/注意:不同后端语言的写法可能不一样
//第二个参数填写允许跨域的域名称,不建议直接写"*"
response.setHeader('Access-Control-Allow-Origin','http://a.com,http://b.com');
response.setHeader('Access-Control-Allow-Headers','X-Request-With');
response.setHeader('Access-Control-Allow-Methods','PUT,POST,GET,DELETE,OPTIONS');
//接受跨域的cookie
response.setHeader('Access-Control-Allow-Credentials','true');
上一篇下一篇

猜你喜欢

热点阅读