1:什么是ajax?ajax做用是什么?
异步的javascript和xml AJAX 是一种用于建立快速动态网页的技术。 ajax用来与后台交互
2:原生js ajax请求有几个步骤?分别是什么
//建立 XMLHttpRequest 对象
var ajax = new XMLHttpRequest();
//规定请求的类型、URL 以及是否异步处理请求。
ajax.open('GET',url,true); //发送信息至服务器时内容编码类型 ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //发送请求 ajax.send(null); //接受服务器响应数据 ajax.onreadystatechange = function () { if (obj.readyState == 4 && (obj.status == 200 || obj.status == 304)) { } };
3:json字符串转换集json对象、json对象转换json字符串
//字符串转对象
JSON.parse(json)
eval('(' + jsonstr + ')') // 对象转字符串 JSON.stringify(json)
4:ajax几种请求方式?他们的优缺点?
经常使用的post,get,delete。不经常使用copy、head、link等等。javascript
###代码上的区别 1:get经过url传递参数 2:post设置请求头 规定请求数据类型 ###使用上的区别 1:post比get安全 (由于post参数在请求体中。get参数在url上面) 2:get传输速度比post快 根据传参决定的。 (post经过请求体传参,后台经过数据流接收。速度稍微慢一些。而get经过url传参能够直接获取) 3:post传输文件大理论没有限制 get传输文件小大概7-8k ie4k左右 4:get获取数据 post上传数据 (上传的数据比较多 并且上传数据都是重要数据。因此不论在安全性仍是数据量级 post是最好的选择)
5:什么状况形成跨域?
同源策略限制 不一样源会形成跨域。如下任意一种状况不一样,都是不一样源。php
http://www.baidu.com/8080/index.htmlhtml
http:// | 协议不一样 |
---|---|
www | 子域名不一样 |
baidu.com | 主域名不一样 |
8080 | 端口号不一样 |
www.baidu.com | ip地址和网址不一样 |
6:跨域解决方案有哪些?
1:jsonp 只能解决get跨域(问的最多)
-
原理:动态建立一个script标签。利用script标签的src属性不受同源策略限制。由于全部的src属性和href属性都不受同源策略限制。能够请求第三方服务器数据内容。
-
步骤:
- 去建立一个script标签
- script的src属性设置接口地址
- 接口参数,必需要带一个自定义函数名 要否则后台没法返回数据。
- 经过定义函数名去接收后台返回数据
//去建立一个script标签
var script = document.createElement("script"); //script的src属性设置接口地址 并带一个callback回调函数名称 script.src = "http://127.0.0.1:8888/index.php?callback=jsonpCallback"; //插入到页面 document.head.appendChild(script); //经过定义函数名去接收后台返回数据 function jsonpCallback(data){ //注意 jsonp返回的数据是json对象能够直接使用 //ajax 取得数据是json字符串须要转换成json对象才可使用。 }
2:CORS:跨域资源共享
-
原理:服务器设置Access-Control-Allow-OriginHTTP响应头以后,浏览器将会容许跨域请求
-
限制:浏览器须要支持HTML5,能够支持POST,PUT等方法兼容ie9以上
须要后台设置 Access-Control-Allow-Origin: * //容许全部域名访问,或者 Access-Control-Allow-Origin: http://a.com //只容许全部域名访问
3:设置 document.domain
-
原理:相同主域名不一样子域名下的页面,能够设置document.domain让它们同域
-
限制:同域document提供的是页面间的互操做,须要载入iframe页面
// URL http://a.com/foo
var ifr = document.createElement('iframe'); ifr.src = 'http://b.a.com/bar'; ifr.onload = function(){ var ifrdoc = ifr.contentDocument || ifr.contentWindow.document; ifrdoc.getElementsById("foo").innerHTML); }; ifr.style.display = 'none'; document.body.appendChild(ifr);
4:用Apache作转发(逆向代理),让跨域变成同域
7:http常见状态码有哪些?
一: 2开头状态码
2xx (成功)表示成功处理了请求的状态代码
200 (成功) 服务器已成功处理了请求。 一般。
二: 3开头状态码
3xx (重定向) 表示要完成请求,须要进一步操做。 一般,这些状态代码用来重定向。
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
三: 4开头状态码
4xx(请求错误) 这些状态代码表示请求可能出错,妨碍了服务器的处理
1:400 (错误请求) 服务器不理解请求的语法。 2:403 (禁止) 服务器拒绝请求。 3:404 (未找到) 服务器找不到请求的网页。
四: 5开头状态码
5xx(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误多是服务器自己的错误,而不是请求出错
500 (服务器内部错误) 服务器遇到错误,没法完成请求。 501 (还没有实施) 服务器不具有完成请求的功能。 例如,服务器没法识别请求方法时可能会返回此代码。 502 (错误网关) 服务器做为网关或代理,从上游服务器收到无效响应。 503 (服务不可用) 服务器目前没法使用(因为超载或停机维护)。 一般,这只是暂时状态。 504 (网关超时) 服务器做为网关或代理,可是没有及时从上游服务器收到请求。 505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。