- | - |
---|---|
301 | 永久重定向 |
302 | 临时重定向 |
304 | 资料未修改 |
401 | 没权限 |
404 | 资源找不到 |
var objectToQueryString = function objectToQueryString(obj) {
return Object.keys(obj).map(function (key) {
return "".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(obj[key]));
}).join('&');
};
function objTransUrlParams(obj) {
const params = [];
Object.keys(obj).forEach((key) => {
let value = obj[key]
// 如果值为undefined我们将其置空
if (typeof value === 'undefined') {
value = ''
}
// 对于需要编码的文本(比如说中文)我们要进行编码
params.push([key, encodeURIComponent(value)].join('='))
})
return params.join('&')
}
export default {
objTransUrlParams
}
2005年2月,AJAX 这个词第一次正式提出,它是 Asynchronous JavaScript and XML 的缩写,指的是通过 JavaScript 的异步通信,从服务器获取 XML 文档从中提取数据,再更新当前网页的对应部分,而不用刷新整个网页。后来,AJAX 这个词就成为 JavaScript 脚本发起 HTTP 通信的代名词,也就是说,只要用脚本发起通信,就可以叫做 AJAX 通信。
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。
http 基于TCP/IP通信协议
TCP运送数据
本质上没有区别
GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。
同源策略,是网站最基本的安全策略
同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。
设想这样一种情况:A网站是一家银行,用户登录以后,又去浏览其他网站。如果其他网站可以读取A网站的 Cookie,会发生什么?
很显然,如果 Cookie 包含隐私(比如存款总额),这些信息就会泄漏。更可怕的是,Cookie 往往用来保存用户的登录状态,如果用户没有退出登录,其他网站就可以冒充用户,为所欲为。因为浏览器同时还规定,提交表单不受同源政策的限制。
由此可见,"同源政策"是必需的,否则 Cookie 可以共享,互联网就毫无安全可言了。
function addScriptTag(src) {
var script = document.createElement('script');
script.setAttribute("type","text/javascript");
script.src = src;
document.body.appendChild(script);
}
window.onload = function () {
addScriptTag('http://example.com/ip?callback=foo');
}
function foo(data) {
console.log('Your public IP address is: ' + data.ip);
};
$.ajax({
url: 'http://127.0.0.1:8001/list',
method: 'get',
datatype: 'jsonp',
success: res => {
console.log(res);
}
})
jsonp安全性不好
只能实现同一个主域,不同子域的操作
v.qq.com
sports.qq.com
子父页面都设置相同的document.domin
子页面用window.parent.user
在服务端设置相关的头信息(options试探请求)
* 或者 写一个地址
但是写* 不能携带cookie
需要配合 webpack webpack-dev-server
实时聊天
iframe.contentWindow.name
let count = 0;
iframe.onload = function () {
if (count === 0) {
iframe.src = 'http://127.0.0.1/Name/proxy.html';
count ++;
return;
}
console.log(iframe.contentWindow.name)
}
3. var prm = new Promise(function (resolved, rejected) {
console.log(1);//允诺的事情正在执行,默认执行一次
resolved(1)
}).then(function(r){
console.log(r)//1111
}).catch()
1. then() 可以接收两个回调,一个成功,一个失败
2. .then().catch(function(){ 失败}) 更清晰
const ajaxPromise = param => {
return new Promise((resovle, reject) => {
var xhr = new XMLHttpRequest();
xhr.open(param.type || "get", param.url, true);
xhr.send(param.data || null);
xhr.onreadystatechange = () => {
if(xhr.readyState === 4){
if(xhr.status === 200){
resovle(JSON.parse(xhr.responseText));
} else{
reject(JSON.parse(xhr.responseText));
}
}
}
})
}
“Asynchronous Javascript And XML”
1,ajax.get
function getXhr() {
var xhr = null;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
return xhr;
}
function param(data) {
var arr = [];
for (var item in data) {
arr.push(item + "=" + encodeURI(data[item]));
}
return arr.join("&");
}
function ajaxGet(obj) {
var xhr = getXhr();
obj.url += '?rand=' + new Date().getTime();
if (obj.data) {
xhr.open('get', obj.url + '&' + param(obj.data));
} else {
xhr.open('get', obj.url);
}
xhr.send(null);
xhr.onreadystatechange = function () {//对该事件进行监听
if (xhr.readyState == 4) {//0 1 2 3 4 状态值
if (xhr.status == 200) {//状态码 404 500
obj.success(xhr.responseText);
} else {
if (obj.err) {
obj.err('响应出错了,错误码:' + xhr.status + xhr.statusText);
}
}
}
}
}
2,ajax post
xhr.open('post', obj.url);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
if (obj.data){
xhr.send(param(obj.data));
} else {
xhr.send(null);
}
###干嘛用的? 解决回调地狱的。怎么解决的?返回出来了
Promise.all([
$.ajax({ url: '', dataType: 'json'}),
$.ajax({ url: '', dataType: 'json'}),
$.ajax({ url: '', dataType: 'json'})
]).then(res => {
//完事了
}, err=> {
alert('错了')
})
runner(function *() {
let data1 = yield $.ajax({url: 'data/1.txt', dataType: 'json'});
let data2 = yield $.ajax({url: 'data/2.txt', dataType: 'json'});
let data3 = yield $.ajax({url: 'data/3.txt', dataType: 'json'});
console.log(data1, data2, data3);
})
function getA() {
return axios.get('/user/123');
}
function getB() {
return axios.get('/user/456');
}
axios.all([getA(), getB()])
.then(axios.spread(a, b) {
//获取到了a,b的数据
})
Promise的优势在于,可以在then方法中继续写Promise对象并返回,然后继续调用then来进行回调操作。
var a = new Promise((res,rej)=>{
console.log(1);
setTimeout(res('成功了'),1000);
}).then((data)=>{
console.log(data);
return new Promise((res,rej) =>{
res('又成功了')
})
}).then((data)=>{
console.log(data)
return new Promise((res,rej)=>{
rej('失败了');
})
}).then((data)=>{
console.log(data);
}).catch((data)=>{
console.log(data);
return 'lll';//可以直接return 数据
}).then((data)=>{
console.log(data)
})
https://blog.csdn.net/shan1991fei/article/details/78966297
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Using_promises