0722 NOTE
AJAX
Asynchronous JavaScript + XML的简写
能够向服务器请求额外的数据而无需加载刷新页面,会带来更好的用户体验
从SSR渲染(服务端渲染)走向CSR渲染(客户端渲染)
SEO(Search Engine Optimization)优化:搜索引擎优化
1.open
open方法参数:
- DOMString method 数据传输方式(GET/POST/PUT/DELETE…)
- DOMString url 连接服务器,也可以写成文件路径,实现加载本地文件
- optional boolean async 异步同步参数(true为异步,false为同步)
- optional DOMString user 用户名
- optional DOMString password 密码
2.send
发送请求. 如果该请求是异步模式(默认),该方法会立刻返回. 相反,如果请求是同步模式,则直到请求的响应完全接受以后,该方法才会返回.
send方法发送数据类型:
3.头消息和超时
头消息:
请求头 requestHeader 前端发送,服务端接收 //设置请求头必须在open之后send之前
响应头 responseHeader 服务端发送,前端接收
4.AJAX状态事件
xhr.addEventListener("readystatechange", loadHandler);
状态主要分 1、信息 100-101 2、成功 200-206 3、重定向 300-307 4、客户端错误 400-417 5、服务器错误 500-505
服务器错误显示在日志中
5.jsonp
注意:jsonp速度比ajax快,不属于通信,属于文件加载
跨域的解决方法:
1.cors跨域 修改服务端响应头
2.jsonp跨域 通过script加载不限地址的规则加载文本转换script代码执行,实现跨域
3.websocket跨域
var xhr = new XMLHttpRequest();
xhr.addEventListener("load",loadHandler)
xhr.open("GET","./data/a.json");
xhr.send();
function loadHandler(e){
var obj = JSON.parse(xhr.response);
var div = document.querySelector("div");
div.textContent = obj.a;
Object.assign(div.style,{
width:"100px",
height:"100px",
color : obj.color,
backgroundColor : obj.backgroundColor
})
}
var form=document.querySelector("form");
form.addEventListener("submit",submitHandler)
function submitHandler(e){
e.preventDefault();
var fd=new FormData(form);
var xhr=new XMLHttpRequest();
xhr.addEventListener("load",loadHandler);
xhr.open("POST","http://localhost:8080");
xhr.send(fd);
}
function loadHandler(e){
}
var xhr = new XMLHttpRequest();
xhr.addEventListener("load", loadHandler);
xhr.open("POST", "http://localhost:8080");
xhr.send();
function loadHandler(e) {
console.log(xhr.getAllResponseHeaders());
console.log(xhr.getResponseHeader("Content-Type"));
}
var xhr = new XMLHttpRequest();
xhr.addEventListener("readystatechange", loadHandler);
xhr.open("POST", "http://localhost:8080");
xhr.send();
function loadHandler(e) {
}
function ajax(url, { method = "GET", body = null } = { method: "GET", body: null }) {
return new Promise(function (resolve, reject) {
if (typeof body !== "string" && body != null) return reject();
var xhr = new XMLHttpRequest();
xhr.open(method, url);
xhr.send(body);
xhr.onreadystatechange = function (e) {
if (xhr.readyState < 4) return;
if (xhr.status >= 400 && xhr.status < 500) reject()
else resolve(xhr.response);
}
xhr.onerror = function (e) {
reject();
}
})
}
init();
async function init(){
var data=await ajax("http://localhost:4001",{method:"POST",body:JSON.stringify({a:1,b:2})});
console.log(data);
}
<script>
var script=document.createElement("script");
script.src="https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=谢天&json=1&p=3&sid=22084_1436_13548_21120_22036_22073&req=2&csor=0&cb=callback";
document.body.appendChild(script);
function callback(o){
console.log(o);
}
</script>
var http = require("http");
const { values, parseInt } = require("lodash");
var querystring = require("querystring");
http.createServer((req, res) => {
var data = "";
req.on("data", function (_data) {
})
req.on("end", function () {
var requery = querystring.parse(decodeURIComponent(req.url.split("?")[1]));
if (req.method.toUpperCase() === "POST") {
try {
data = JSON.parse(data);
} catch (e) {
data = querystring.parse(data);
}
}
res.writeHead("200", {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers":"*",
"Content-Type": "text/html;charset=utf-8"
})
res.end(JSON.stringify("你瞅啥!"))
})
}).listen(8080)
JQuery选择器
优点:兼容能力强(1.12版本之前),向下迭代兼容
主要功能: 1.像CSS那样访问和操作DOM 2.修改CSS控制页面外观 3.简化JavaScript代码操作 4.事件处理更加容易 5.各种动画效果使用方便 6.让Ajax技术更加完美 7.基于jQuery大量插件 8.自行扩展功能插件
|