标签:mit bre nta control 产生 response 不可用 anr style
ajax是一种技术方案 , Asynchronous(异步) JavaScript and XML(用来传输和存储数据,异步JavaScript和XML)
作用:AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。


XHR 是一种用于在 Web 浏览器和 Web 服务器间传输数据消息的 JavaScript API。它支持浏览器使用 HTTP POST(将数据传到服务器)或 GET 请求(从后台服务器访问数据)。该 API 是大多数 Ajax 交互的核心,也是现代 Web 开发的一项基本技术。
方法:
|
abort() |
停止当前请求 |
|
getAllResponseHeaders() |
把HTTP请求的所有响应首部作为键/值对返回 |
|
getResponseHeader("header") |
返回指定首部的串值 |
|
open("method","URL",[asyncFlag],["userName"],["password"]) |
建立对服务器的调用。method参数可以是GET、POST或PUT。url参数可以是相对URL或绝对URL。这个方法还包括3个可选的参数,是否异步,用户名,密码 |
|
send(content) |
向服务器发送请求 |
|
setRequestHeader("header", "value") |
把指定首部设置为所提供的值。在设置任何首部之前必须先调用open()。设置header并和请求一起发送 (‘post‘方法一定要 ) |
|
onreadystatechange |
状态改变的事件触发器,每个状态改变时都会触发这个事件处理器,通常会调用一个JavaScript函数 |
属性:
|
属 性 |
描 述 |
|
readyState |
请求的状态。有5个可取值: |
|
responseText |
服务器的响应,返回数据的文本。 |
|
responseXML |
服务器的响应,返回数据的兼容DOM的XML文档对象 ,这个对象可以解析为一个DOM对象。 |
|
responseBody |
服务器返回的主题(非文本格式) |
|
responseStream |
服务器返回的数据流 |
|
status |
服务器的HTTP状态码(如:404 = "文件末找到" 、200 ="成功" ,等等) |
|
statusText |
服务器返回的状态文本信息 ,HTTP状态码的相应文本(OK或Not Found(未找到)等等) |
(1)安装浏览器,创建代理(创建XMLHttpRequest对象 )
if (window.XMLHttpRequest) {
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xhr = new XMLHttpRequest();
} else {
// IE6, IE5 浏览器执行代码
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
此时xhr的内容
(2) 打开浏览器,输入网址(向服务器发送请求)
.open(method,url,async) xhr.open(‘get‘,‘http://127.0.0.1:3000/api/mafengyan?‘,true);
(3) 敲回车键 进行请求
.send(string) method == post 时候的string为发送的数据请求数据
//post 方法设置请求头 xhr.setRequestHeader(‘Content-Type‘,‘application/x-www-form-urlencoded;charset=UTF-8‘) xhr.send();
send可以传递的参数类型
(4)等待响应(服务器响应)
(5)查看结果(XMLHttpRequest readyState状态)
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status ==200){
var res = xhr.responseText ;
console.log(res);
console.log(xhr.getAllResponseHeaders())
console.log(xhr.getResponseHeader(‘Content-Type‘))
}
}
|
0 |
请求未初始化(还没有调用 open()) |
|
1 |
服务器连接已建立但是还没有发送(还没有调用 send()) |
|
2 |
请求已接收通常现在可以从响应中获取内容头) |
|
3 |
请求处理中 |
|
4 |
请求已完成,且响应已就绪 |

|
100——客户必须继续发出请求 |
1xx:信息响应类,表示接收到请求并且继续处理
2xx:处理成功响应类,表示动作被成功接收、理解和接受
3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
5xx:服务端错误,服务器不能正确执行一个正确的请求
<tips-创建ajax的过程>
var xhr;
//1. 创建XMLHttpRequest 的对象
if (window.XMLHttpRequest) {
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xhr = new XMLHttpRequest();
} else {
// IE6, IE5 浏览器执行代码
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
//2.调用open
xhr.open(‘post‘,‘http://127.0.0.1:3000/api/mafengyanRespon‘,true);
//post 方法 设置头部
xhr.setRequestHeader(‘Content-Type‘,‘application/x-www-form-urlencoded;charset=UTF-8‘)
//3 发送数据
xhr.send(data);
//4.监听接收数据 readyState
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status ==200){
console.log(xhr.response)
}
}
获取response数据:
<xhr.response>
<xhr.responseText>
<xhr.responseXML>
判断ajax是否成功返回的条件
xhr.readyState==4 && xhr.status==200的解释:请求完成并且成功返回
if(xhr.readyState == 4 && shr.status ==200){
console.log("成功");
}


此时的xhr

<post方法设置请求头>
// post 方式需要设置请求头 xhr.setRequestHeader(‘Content-Type‘,‘application/x-www-form-urlencoded;charset=UTF-8‘ xhr.send(‘id=3&age=24‘);
方法的第一个参数 header 大小写不敏感,即可以写成content-type,也可以写成Content-Type,甚至写成content-Type;请求头注意点
method为post的时 不设置头接收不到数据
data = new ArrayBuffer(512);
var longInt8View = new Uint8Array(data);
for (var i=0; i< longInt8View.length; i++) {
longInt8View[i] = i % 255;
}

Blob
const BYTES_PER_CHUNK = 1024 * 1024; const SIZE = blob.size; xhr.setRequestHeader(‘Content-Range‘, start+‘-‘+end+‘/‘+SIZE); xhr.send(blob.slice(start, end));
FormData
var forms=new FormData();
forms.append("name","22222");
// post 方式需要设置请求头
// xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xhr.setRequestHeader(‘Content-Type‘,‘application/x-www-form-urlencoded;charset=UTF-8‘)
xhr.send(forms);
send的传递类型影响content-type的头部
xhr.send(data)中data参数的数据类型会影响请求头部content-type的默认值:




send不加请求头的时候
不加请求头信息:

增加了请求头部后

<获取头部的信息>

reponseType:用于设置返回值的类型







<设置超时的时间>
// 超时时间单位为毫秒
xhr.timeout = 1000
// 当请求超时时,会触发 ontimeout 方法
xhr.ontimeout = () => console.log(‘请求超时‘)
假装已经安装的node等一系列环境 然后 node 文件名.js
const express = require(‘express‘);
const app = express()
//导入cors模块,该模块为跨域所用
const cors = require(‘cors‘);
app.use(cors());
//安装body-parser 插件 并进行引用 解析post的数据 不加这个解析不到数据哦
var bodyParser = require(‘body-parser‘);
app.use(bodyParser());
app.use(bodyParser.json());//数据JSON类型
app.use(bodyParser.urlencoded({ extended: false }));//解析post请求数据
//设置方法的请求头
app.all(‘*‘, function(req, res, next) {
let origin=req.headers.origin;
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header("X-Powered-By", ‘ 3.2.1‘);
res.header("Content-Type", "application/json;charset=utf-8");
next();
});
//设置get请求接口
app.get(‘/api/cute‘, (req, res) => {
console.log(req.query);
res.json(req.query)
})
//设置post请求接口
app.post(‘/api/cute‘, (req, res) => {
console.log(req.body)
res.status(200); ;
res.json(req.body)
})
app.post(‘/api/cuteFile‘, (req, res) => {
console.log(req.body)
res.send(req.body)
res.end("停止请求");
})
app.get(‘/api/cuteFile‘, (req, res) => {
console.log(req.query);
res.json(req.query)
})
//xml 文件类型
app.post(‘/api/cuteXml‘, (req, res) => {
var data = ‘<?xml version="1.0" encoding="UTF-8"?><root><tag>text</tag></root>‘;
res.writeHead(200, {‘Content-Type‘: ‘application/xml‘});
res.end(data);
res.send(data)
res.end();
})
app.post(‘/api/cuteRespon‘, (req, res) => {
console.log(req.body)
res.json(req.body)
})
//监听服务
app.listen(3000, () => {
console.log(‘正在监听端口3000‘);
})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link rel="stylesheet" href="./co.css">
</head>
<body>
<h1 style="text-align:center;">ajax的哪些事儿~</h1>
<div class="box">
<h5>form表单提交</h5>
<form action="http://127.0.0.1:3000/api/cute" method="post">
<div class="item">
<label for="name">姓名</label>
<input type="text" name="username" placeholder="请输入名字" id="name">
</div>
<div class="item">
<label for="mobile">手机号</label>
<input type="text" name="mobile" id="mobile" placeholder="请输入手机号">
</div>
<input type="submit" value="form 表单提交">
</form>
<input type="submit" value="js提交" onclick="submitMsg1()">
</div>
<div class="box">
<h2>send 的数据类型</h2>
<div class="item">
<input type="submit" value="Document" onclick="changeSendType(‘Document‘)">
<input type="submit" value="Blob" onclick="changeSendType(‘Blob‘)">
<input type="submit" value="ArrayBuffer" onclick="changeSendType(‘ArrayBuffer‘)">
<input type="submit" value="DOMString" onclick="changeSendType(‘DOMString‘)">
<input type="submit" value="FormData " onclick="changeSendType(‘FormData‘)">
<input type="submit" value="null" onclick="changeSendType(‘null‘)">
</div>
</div>
<div class="box">
<h2>responseType</h2>
<div class="item">
<input type="submit" value="默认不设置" onclick="submitMsg()">
<input type="submit" value="json" onclick="submitMsg(‘json‘)">
<input type="submit" value="arraybuffer" onclick="submitMsg(‘arraybuffer‘)">
<input type="submit" value="blob" onclick="submitMsg(‘blob‘)">
<input type="submit" value="document" onclick="submitMsg(‘document‘)">
<input type="submit" value="text" onclick="submitMsg(‘text‘)">
</div>
</div>
<div class="box">
<h2>封装的ajax</h2>
<div class="item">
<input type="submit" value="请求" onclick="getdata()">
</div>
</div>
<script src="../js/myajax.js"></script>
<script >
// ajax的big demo
function submitMsg1(){
var name = document.getElementById("name").value;
var mobile = document.getElementById("mobile").value
var xhr;
//1. 创建XMLHttpRequest 的对象
if (window.XMLHttpRequest) {
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xhr = new XMLHttpRequest();
} else {
// IE6, IE5 浏览器执行代码
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
console.log(xhr);
//2.发送数据
var data = ‘name=‘+name+"&mobile="+mobile;
xhr.open(‘get‘,‘http://127.0.0.1:3000/api/cute?‘+data,true);
// xhr.responseType = ‘json‘;
// post 方式需要设置请求头
xhr.setRequestHeader(‘Content-Type‘,‘application/x-www-form-urlencoded;charset=UTF-8‘)
xhr.send(data);
// console.log("停止请求");
// xhr.abort();
//3.监听接收数据 readyState
xhr.onreadystatechange = function(){
console.log(‘xhr.readyState ‘+ xhr.readyState)
console.log(‘xhr.status ‘+ xhr.status)
if(xhr.readyState == 4 && xhr.status ==200){
var res = xhr.responseText ;
console.log(res);
console.log(‘xhr.responseXMl ‘+xhr.responseXMl)
console.log(‘xhr.statusText ‘+xhr.statusText)
console.log(‘XMLHttpRequest.responseURL ‘ + xhr.responseURL)
console.log(‘xhr.responseXMl ‘+xhr.responseXMl)
console.log(xhr.getAllResponseHeaders())
console.log(xhr.getResponseHeader(‘Content-Type‘))
console.log(xhr)
}
}
// 超时时间单位为毫秒
// xhr.timeout = 1
// 当请求超时时,会触发 ontimeout 方法
// xhr.ontimeout = () => console.log(‘请求超时‘)
}
//sendType
function changeSendType(type){
var data;
switch(type){
case ‘FormData‘:{
data=new FormData();
data.append("name","22222");
console.log(data)
break;
}
case ‘ArrayBuffer‘:{
data = new ArrayBuffer(512);
var longInt8View = new Uint8Array(data);
for (var i=0; i< longInt8View.length; i++) {
longInt8View[i] = i % 255;
}
break;
}
case ‘DOMString‘:{
data = ‘name=2&age=34‘;
break;
}
case ‘Blob‘:{
var blob = new Blob();
const BYTES_PER_CHUNK = 1024 * 1024;
const SIZE = blob.size;
data = blob;
break;
}
case ‘null‘:{
data = null;
break;
}
case ‘Document‘:{
data = document.querySelector(".box");
break;
}
}
submitMsg2(data);
}
function submitMsg2(data){
var xhr;
//1. 创建XMLHttpRequest 的对象
if (window.XMLHttpRequest) {
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xhr = new XMLHttpRequest();
} else {
// IE6, IE5 浏览器执行代码
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.open(‘post‘,‘http://127.0.0.1:3000/api/cuteFile‘,true);
// xhr.open(‘get‘,‘http://127.0.0.1:3000/api/cuteFile?‘+data,true);
// post 方式需要设置请求头
// xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
// xhr.setRequestHeader(‘Content-Type‘,‘application/x-www-form-urlencoded;charset=UTF-8‘)
// xhr.setRequestHeader(‘Content-Type‘,‘multipart/form-data; boundary=[XXXX]‘)
console.log(data);
xhr.send(data);
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
console.log(xhr.getAllResponseHeaders())
console.log(xhr)
}
}
}
//responseType
function submitMsg(type){
var xhr;
//1. 创建XMLHttpRequest 的对象
if (window.XMLHttpRequest) {
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xhr = new XMLHttpRequest();
} else {
// IE6, IE5 浏览器执行代码
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
//2.发送数据
var data = ‘name=1&mobile=mobile‘;
// xhr.open(‘post‘,‘http://127.0.0.1:3000/api/cuteRespon‘,true);
xhr.open(‘post‘,‘http://127.0.0.1:3000/api/cuteFile‘,true);
xhr.responseType = type;
xhr.setRequestHeader(‘Content-Type‘,‘application/x-www-form-urlencoded;charset=UTF-8‘)
xhr.send(data);
//3.监听接收数据 readyState
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status ==200){
console.log(xhr)
}
}
}
function getdata(){
ajax({
method:"get",
url:‘http://127.0.0.1:3000/api/cute‘,
data:{age:3,name:4},
success:function(res){
console.log("请求成功了")
console.log(res);
console.log(JSON.parse(res));
}
})
}
</script>
</body>
</html>
然后进行html文件 太长了 自取~
标签:mit bre nta control 产生 response 不可用 anr style
原文地址:https://www.cnblogs.com/mfyngu/p/12207280.html