一、Axios使用方法
1.get(和在jQuery中的方法类似)
<!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/axios.min.js"></script>
</head>
<body>
<input type="button" value="发送get请求" id="btn1">
<div id="div1"></div>
<script>
document.querySelector("#btn1").onclick = function() {
axios.get("data/student.json")
.then(function(res) {
//res.data:服务器端返回的数据
//console.log(res.data)
jsonData(res.data)
})
}
//处理数据
function jsonData(data) {
var table = "<table border='1' bordercolor='red'><tr><th>学号</th><th>姓名</th><th>年龄</th></tr>";
for (var i = 0; i < data.length; i++) {
table += "<tr><td>" + data[i].stuID + "</td><td>" + data[i].stuName + "</td><td>" + data[i].stuAge + "</td></tr>"
}
table += "</table>"
document.querySelector("#div1").innerHTML = table
}
</script>
</body>
</html>
效果:
2.使用post(简单表单验证)
<!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/axios.min.js"></script>
<style>
.gcolor {
color: green;
}
.rcolor {
color: red;
}
</style>
</head>
<body>
用户名:<input type="text" id="uname">
<hr />
<input type="button" value="发送get请求" id="btn1">
<div id="div1"></div>
<script>
document.querySelector("#btn1").onclick = function() {
var uname = document.querySelector("#uname").value
var obj = {
username: uname,
}
axios.post("http://127.0.0.1:8089", JSON.stringify(obj))
.then(function(res) {
//res.data:服务器端返回的数据
if (res.data.status == 1) {
document.querySelector("#div1").classList.remove("rcolor")
document.querySelector("#div1").classList.add("gcolor")
document.querySelector("#div1").innerHTML = "用户名可用"
} else {
document.querySelector("#div1").classList.remove("gcolor")
document.querySelector("#div1").classList.add("rcolor")
document.querySelector("#div1").innerHTML = "用户名已存在"
}
})
}
</script>
</body>
</html>
服务器代码:
var http = require("http");
let queryString = require('querystring');
const server = http.createServer(function(req, res) {
//实现跨域
res.writeHead(200, { "Access-Control-Allow-Origin": "*" });
//定义变量保存传递过来的参数
let params = "";
//注意:在nodejs中post请求的参数我们不能一次性拿到,必须分批获取
//为req绑定data事件并添加回调函数
req.on("data", function(chunk) {
params += chunk.toString();
});
//绑定一个结束事件
req.on("end", function() {
var names = ["admin", "张三", "李四", "Tom", "Lucy"]
var obj = JSON.parse(params)
if (names.indexOf(obj.username) > -1) {
result = { "message": "用户名已存在", status: 0 }
} else {
result = { "message": "此用户名可用", status: 1 }
}
res.end(JSON.stringify(result));
});
}).listen(8089);
//鼠标右键 运行方式-->Node Application 先运行服务器
//再运行html页面
效果:
二、封装一个自己的Ajax
自己封装也是要按照那4步骤写只不过就是把他们封装到一个函数里面
js代码:
function myAjax(obj) {
var xmlHttp; //保存xmlHttpRequest对象
var type = obj.requestType; //保存请求方式
var cache = obj.cache || false; //get时是否使用缓存,默认否
var success = obj.success; //数据请求成功的回调方法
var error = obj.error; //发生错误的回调方法
var async = obj.async || false; //是否异步,默认否
var data = []; //存储用户发来的数据
var url = obj.url;
createXMLHttpRequest() //调用
//定义状态监听函数
xmlHttp.onreadystatechange = function() {
switch (xmlHttp.readyState) {
case 1:
console.log("open() 方法已调用,但是 send() 方法未调用。请求还没有被发送。");
break;
case 2:
console.log("Send() 方法已调用,HTTP 请求已发送到 Web 服务器。未接收到响应。");
break;
case 3:
console.log("所有响应头部都已经接收到。响应体开始接收但未完成。");
break;
case 4:
if (xmlHttp.status == 200) {
console.log("HTTP 响应已经完全接收。");
success(xmlHttp.responseText); //调用回调函数
}
break;
default:
error(xmlHttp.statusText);
break;
}
}
//把用户传来的数据转换成字符串
for (var i in obj.data) {
data.push(i + '=' + obj.data[i]);
}
data = data.join('&');
if (type.toUpperCase() == 'GET') { //如果是get请求
if (cache == false) { //如果get请求不使用缓存
xmlHttp.open('get', url + '?' + data + '&random=' + Math.random(), async)
xmlHttp.send('null')
} else { //如果get请求使用缓存
xmlHttp.open('get', url + '?' + data, async)
xmlHttp.send('null')
}
} else if (type.toUpperCase() == 'POST') //如果是post请求
{
xmlHttp.open('post', url, async)
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
xmlHttp.send(data)
} else {
throw new Error('您的请求方法有误!')
}
//创建XMLHttpRequest对象
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP")
} else {
try {
xmlHttp = new XMLHttpRequest()
} catch (error) {
xmlHttp = false
}
}
}
}
使用的时候和引入js文件一样使用<script>标签引用
<script src="js/myAjax.js"></script>
三、跨域请求
简介:浏览器均默认开启了同源策略,它指Ajax请求所在的页面和被请求的页面在域名、端口均相同才能被访问,否则会提示如下错误
1.JSONP解决方案和CROS解决方案
JSONP解决方案(JSONP 不是真正的AJAX请求,是利用script的src可可以跨域的特性,动态加载一段script脚本,脚本中包含需要的信息)
$.getJSON("https://www.runoob.com/try/ajax/jsonp.php?jsoncallback=?")
2.CROS解决方案(在服务器端设置)
//解决跨域
res.writeHead(200, { "Access-Control-Allow-Origin": "*" });