<script>
// 封装一个函数sendAJAX发送GET请求,参数为url,放回结果为Promise对象
function sendAJAX(url) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.responseType = "json";
xhr.open("GET", url);
xhr.send();
//处理结果
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
//判断成功
if (xhr.status >= 200 && xhr.status < 300) {
//成功的结果
resolve(xhr.response);
}
//失败的结果
reject(xhr.status);
}
};
});
}
sendAJAX("http://api.apiopen.top/getJoke").then(
(value) => {
console.log(value);
},
(reason) => {
console.warn(reason);
}
);
</script>
723_promise_util.promisify
发表于
分类于
ajax-promise-axios
//util.promisify方法:将普通函数转变为promise风格的函数
//引入util模块
const util = require("util");
//引入fs模块
const fs = require("fs");
let mineReadFile = util.promisify(fs.readFile);
mineReadFile("./source/1.txt").then(
(value) => {
console.log(value.toString());
},
(reason) => {
console.log(reason);
}
);
723_promise_读取文件2
发表于
分类于
ajax-promise-axios
//读取文件
function mineReadFile(path) {
return new Promise((resolve, reject) => {
require("fs").readFile(path, (err, data) => {
//判断
if (err) {
reject(err);
}
resolve(data);
});
});
}
mineReadFile("./source/1.txt").then(
(value) => {
console.log(value.toString());
},
(reason) => {
console.log(reason);
}
);
723_promise_fs读取文件
发表于
分类于
ajax-promise-axios
const fs = require("fs");
//普通形式
// fs.readFile("./source/1.txt", (err, data) => {
// if (err) {
// console.log("出错了");
// }
// console.log(data.toString());
// });
//Promise形式
let p = new Promise((resolve, reject) => {
fs.readFile("./source/1.txt", (err, data) => {
//如果出错
if (err) reject(err);
//如果成功
resolve(data);
});
});
p.then(
(value) => {
console.log(value.toString());
},
(reason) => {
console.log(reason);
}
);
723_promise_基本介绍
发表于
分类于
ajax-promise-axios
723_ajax_server文件
发表于
分类于
ajax-promise-axios
//1. 引入express
const express = require("express");
//2. 创建应用对象
const app = express();
//3. 创建路由规则
// request 是对请求报文的封装
// response 是对响应报文的封装
app.get("/server", (request, response) => {
//设置响应头 设置允许跨域
response.setHeader("Access-Control-Allow-Origin", "*");
//设置响应体
response.send("HELLO AJAX - 2");
});
//可以接收任意类型的请求
app.all("/server", (request, response) => {
//设置响应头 设置允许跨域
response.setHeader("Access-Control-Allow-Origin", "*");
//响应头
response.setHeader("Access-Control-Allow-Headers", "*");
//设置响应体
response.send("HELLO AJAX POST");
});
//JSON 响应
app.all("/json-server", (request, response) => {
//设置响应头 设置允许跨域
response.setHeader("Access-Control-Allow-Origin", "*");
//响应头
response.setHeader("Access-Control-Allow-Headers", "*");
//响应一个数据
const data = {
name: "atguigu",
};
//对对象进行字符串转换
let str = JSON.stringify(data);
//设置响应体
response.send(str);
});
//针对 IE 缓存
app.get("/ie", (request, response) => {
//设置响应头 设置允许跨域
response.setHeader("Access-Control-Allow-Origin", "*");
//设置响应体
response.send("HELLO IE - 5");
});
//延时响应
app.all("/delay", (request, response) => {
//设置响应头 设置允许跨域
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Headers", "*");
setTimeout(() => {
//设置响应体
response.send("延时响应");
}, 1000);
});
//jQuery 服务
app.all("/jquery-server", (request, response) => {
//设置响应头 设置允许跨域
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Headers", "*");
// response.send('Hello jQuery AJAX');
const data = { name: "尚硅谷" };
response.send(JSON.stringify(data));
});
//axios 服务
app.all("/axios-server", (request, response) => {
//设置响应头 设置允许跨域
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Headers", "*");
// response.send('Hello jQuery AJAX');
const data = { name: "尚硅谷" };
response.send(JSON.stringify(data));
});
//fetch 服务
app.all("/fetch-server", (request, response) => {
//设置响应头 设置允许跨域
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Headers", "*");
// response.send('Hello jQuery AJAX');
const data = { name: "尚硅谷" };
response.send(JSON.stringify(data));
});
//jsonp服务
app.all("/jsonp-server", (request, response) => {
// response.send('console.log("hello jsonp")');
const data = {
name: "尚硅谷atguigu",
};
//将数据转化为字符串
let str = JSON.stringify(data);
//返回结果
response.end(`handle(${str})`);
});
//用户名检测是否存在
app.all("/check-username", (request, response) => {
// response.send('console.log("hello jsonp")');
const data = {
exist: 1,
msg: "用户名已经存在",
};
//将数据转化为字符串
let str = JSON.stringify(data);
//返回结果
response.end(`handle(${str})`);
});
//
app.all("/jquery-jsonp-server", (request, response) => {
// response.send('console.log("hello jsonp")');
const data = {
name: "尚硅谷",
city: ["北京", "上海", "深圳"],
};
//将数据转化为字符串
let str = JSON.stringify(data);
//接收 callback 参数
let cb = request.query.callback;
//返回结果
response.end(`${cb}(${str})`);
});
app.all("/cors-server", (request, response) => {
//设置响应头
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Headers", "*");
response.setHeader("Access-Control-Allow-Method", "*");
// response.setHeader("Access-Control-Allow-Origin", "http://127.0.0.1:5500");
response.send("hello CORS");
});
//4. 监听端口启动服务
app.listen(8000, () => {
console.log("服务已经启动, 8000 端口监听中....");
});
723_ajax_jsonp
发表于
分类于
ajax-promise-axios
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<!-- 只适用于get请求 -->
用户名:<input type="text" id="username" />
<p></p>
<script>
//获取input元素
const input = document.querySelector("#username");
const p = document.querySelector("p");
//声明handle函数
function handle(data) {
input.style.border = "solid 1px red";
p.innerHTML = data.msg;
}
//绑定事件
input.onblur = function () {
//获取用户输入值
let username = this.value;
//向服务端发送请求,检测用户名是否已经存在
//1、创建script标签
const script = document.createElement("script");
//2、设置标签的src属性
script.src = "http://127.0.0.1:8000/check-username";
//添加script
document.body.appendChild(script);
};
</script>
</body>
</html>
723_ajax_同源策略
发表于
分类于
ajax-promise-axios
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<h1>西南大学</h1>
<button>点击获取用户数据</button>
<script>
const btn = document.querySelector("button");
btn.onclick = function () {
const x = new XMLHttpRequest();
//因为这里满足同源策略,所以url可以简写
x.open("GET", "/data");
//发送
x.send();
x.onreadystatechange = function () {
if (x.readyState == 4) {
if (x.status >= 200 && x.status < 300) {
console.log(x.response);
}
}
};
};
</script>
</body>
</html>
722_ajax_重复请求问题
发表于
分类于
ajax-promise-axios
<script>
var btns = document.querySelectorAll("button");
let x;
let isSending = false; //是否正在发送ajax请求
btns[0].onclick = function () {
//如果上一个请求正在发送,则取消这一次的请求
if (isSending) {
x.abort();
}
x = new XMLHttpRequest();
//修改标识变量的值
isSending = true;
x.open("GET", "http://127.0.0.1:8000/delay");
x.send();
x.onreadystatechange = function () {
if (xhr.readyState === 4) {
//判断响应状态码 2##表示成功
if (xhr.status >= 200 && xhr.status < 300) {
isSending = false;
}
}
};
};
</script>
722_ajax_取消请求
发表于
分类于
ajax-promise-axios
<script>
var btns = document.querySelectorAll("button");
let x;
btns[0].onclick = function () {
x = new XMLHttpRequest();
x.open("GET", "http://127.0.0.1:8000/delay");
x.send();
};
btns[1].onclick = function () {
x.abort();
};
</script>