一、Axios使用get/post的请求
Axios是一个基于promise 网络请求库,作用于和浏览器中。它是isomorphic 的(即同一套代码可以运行在浏览器和中)。在服务端它使用原生 http模块,而在客户端(浏览端)则使用 XMLHttpRequests。
Axios特性:
- 从浏览器创建XMLHttpRequests
- 从 创建http请求
- 支持Promise APl
- 拦截请求和响应
- 转换请求和响应数据
- 取消请求
- 自动转换JSON数据
- 客户端支持防御XSRF
Axios:
- Axios是专注于网络数据请求的库。
- 相比于原生的XMLHttpRequgs对象,axios简单易用。
- 相比于jQuery,axios更加轻量化,只专注于网络数据请求。
Axios发送get请求的语法:
(‘url’,{ params :{/*参数*} } ).then(callback)其中在 then中函数执行成功后的回调
Axios 发送post请求的语法:
Axios. get(‘url',{{/*参数*/} } ).then(callback)其中在 then 中执行成功后的回调函数.
案例:1
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- 引入axios的文件 -->
<script src="js/"></script>
</head>
<body>
<input type="button" value="发送get请求" >
<div ></div>
<script>
("#btn1").onclick = function() {
("data/")
.then(function(res) {
//:服务器端返回的数据
//()
jsonData()
})
}
//处理数据
function jsonData(data) {
var table = "<table border='1' bordercolor='red'><tr><th>学号</th><th>姓名</th><th>年龄</th></tr>";
for (var i = 0; i < ; i++) {
table += "<tr><td>" + data[i].stuID + "</td><td>" + data[i].stuName + "</td><td>" + data[i].stuAge + "</td></tr>"
}
table += "</table>"
("#div1").innerHTML = table
}
</script>
</body>
</html>
代码:
[{
"stuID": "1001",
"stuName": "张三",
"stuAge": 20
}, {
"stuID": "1002",
"stuName": "李四",
"stuAge": 19
}, {
"stuID": "1003",
"stuName": "李梅",
"stuAge": 21
}, {
"stuID": "1004",
"stuName": "Rose",
"stuAge": 19
}, {
"stuID": "1005",
"stuName": "Tom",
"stuAge": 20
}]
案例:2
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="js/"></script>
<style>
.gcolor {
color: green;
}
.rcolor {
color: red;
}
</style>
</head>
<body>
用户名:<input type="text" > 密码:
<input type="password" >
<hr />
<input type="button" value="发送get请求" >
<div ></div>
<script>
("#btn1").onclick = function() {
var uname = ("#uname").value
var pwd1 = ("#pwd").value
var obj = {
username: uname,
pwd: pwd1
}
("http://127.0.0.1:8089", (obj))
.then(function(res) {
//:服务器端返回的数据
if ( == 1) {
("#div1").("rcolor")
("#div1").("gcolor")
("#div1").innerHTML = "用户名可用"
} else {
("#div1").("gcolor")
("#div1").("rcolor")
("#div1").innerHTML = "用户名已存在"
}
})
}
</script>
</body>
</html>
二、封装
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="js/"></script>
</head>
<body>
<input type="button" value="提交" >
<div ></div>
<script>
("btn1").onclick = function() {
myAjax({
requestType: 'get',
url: 'data/',
async: true,
cache: false,
data: {
username: "admin",
pwd: "123456"
},
success: function(data) {
(data);
//将返回的数据封装成json
myFunction((data))
},
error: function(statusText) {
alert("请求失败了,以下是具体信息:" + statusText)
}
})
}
//处理数据
function myFunction(data) {
var table = "<table border='1' bordercolor='red'><tr><th>学号</th><th>姓名</th><th>年龄</th></tr>";
for (var i = 0; i < ; i++) {
table += "<tr><td>" + data[i].stuID + "</td><td>" + data[i].stuName + "</td><td>" + data[i].stuAge + "</td></tr>"
}
table += "</table>"
("div1").innerHTML = table
}
</script>
</body>
</html>
封装的ajax代码:
function myAjax(obj) {
var xmlHttp; //保存xmlHttpRequest对象
var type = ; //保存请求方式
var cache = || false; //get时是否使用缓存,默认否
var success = ; //数据请求成功的回调方法
var error = ; //发生错误的回调方法
var async = || false; //是否异步,默认否
var data = []; //存储用户发来的数据
var url = ;
createXMLHttpRequest() //调用
//定义状态监听函数
= function() {
switch () {
case 1:
("open() 方法已调用,但是 send() 方法未调用。请求还没有被发送。");
break;
case 2:
("Send() 方法已调用,HTTP 请求已发送到 Web 服务器。未接收到响应。");
break;
case 3:
("所有响应头部都已经接收到。响应体开始接收但未完成。");
break;
case 4:
if ( == 200) {
("HTTP 响应已经完全接收。");
success(); //调用回调函数
}
break;
default:
error();
break;
}
}
//把用户传来的数据转换成字符串
for (var i in ) {
(i + '=' + [i]);
}
data = ('&');
if (() == 'GET') { //如果是get请求
if (cache == false) { //如果get请求不使用缓存
('get', url + '?' + data + '&random=' + (), async)
('null')
} else { //如果get请求使用缓存
('get', url + '?' + data, async)
('null')
}
} else if (() == 'POST') //如果是post请求
{
('post', url, async)
("Content-Type", "application/x-www-form-urlencoded")
(data)
} else {
throw new Error('您的请求方法有误!')
}
//创建XMLHttpRequest对象
function createXMLHttpRequest() {
if () {
xmlHttp = new ActiveXObject("")
} else {
try {
xmlHttp = new XMLHttpRequest()
} catch (error) {
xmlHttp = false
}
}
}
}
function myAjax(obj) {
var myAjax
//创建一个请求对象xmlhttp
createxmlhttp()
// ()
if (() == "GET") {
(, + "?" + , )
()
} else if (() == "POST") {
(, , )
("Content-Type", "application/x-www-form-urlencoded");
(data) //post请求通过send()将参数传递到服务器端
}
// 事件处理
= function() {
if ( == 200 && == 4) {
()
}
}
}
function createxmlhttp() {
var xmlhttp
if () {
try {
xmlhttp = new ActiveXObject("")
} catch (error) {
xmlhttp = new ActiveXObject("")
}
} else if () {
try {
xmlHttp = new XMLHttpRequest()
} catch (error) {
xmlhttp = false
}
}
return xmlHttp
}
代码:
[{
"stuID": "1001",
"stuName": "张三",
"stuAge": 20
}, {
"stuID": "1002",
"stuName": "李四",
"stuAge": 19
}, {
"stuID": "1003",
"stuName": "李梅",
"stuAge": 21
}, {
"stuID": "1004",
"stuName": "Rose",
"stuAge": 19
}, {
"stuID": "1005",
"stuName": "Tom",
"stuAge": 20
}]
三、发起跨域请求
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="js/jquery-3.6."></script>
</head>
<body>
<script>
$(function() {
$.ajax({
method: "get",
url: "/try/ajax/?jsoncallback=success",
data: {
uname: "admin",
pwd: "123456"
},
success: function(res) {
(res)
}
})
})
</script>
</body>
</html>
实现跨域的代码:
var http = require("http");
let queryString = require('querystring');
const server = (function(req, res) {
//实现跨域
(200, { "Access-Control-Allow-Origin": "*" });
//定义变量保存传递过来的参数
let params = "";
//注意:在nodejs中post请求的参数我们不能一次性拿到,必须分批获取
//为req绑定data事件并添加回调函数
("data", function(chunk) {
params += ();
});
//绑定一个结束事件
("end", function() {
var names = ["admin", "张三", "李四", "Tom", "Lucy"]
var obj = (params)
if (() > -1) {
result = { "message": "用户名已存在", status: 0 }
} else {
result = { "message": "此用户名可用", status: 1 }
}
((result));
});
}).listen(8089);
//鼠标右键 运行方式-->Node Application 先运行服务器
//再运行html页面