# Ajax
**Repository Path**: qiang-xiaoyue/ajax
## Basic Information
- **Project Name**: Ajax
- **Description**: 学习路上的代码
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-09-07
- **Last Updated**: 2023-09-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: Ajax
## README
# 学习
## Ajax
根据B站up主 尚硅谷的Ajax教程学习整理 [【尚硅谷】3小时Ajax入门到精通](https://www.bilibili.com/video/BV1WC4y1b78y/?spm_id_from=333.337.search-card.all.click&vd_source=b0c96212c6cbc6032300f011d1554de7)
[菜鸟教程](https://www.runoob.com/ajax/ajax-tutorial.html)
### node.js 和 express
1. node.js
运行在服务端的JavaScript
2. express
基于nodeJS快速开发、极简的平台
#### node.js 和 express 搭建一个服务端
```
const express = require("express");
const app = express();
const port = 8000;
app.listen(port, () => {
console.log("服务已启动,8000端口正在被监听...");
});
app.get("/", (request, response) => {
//设置跨域
response.setHeader("Access-Control-Allow-Origin", "*");
//设置相应体
response.send("我是首页");
});
```
### 原生Ajax
格式:
> const xhr = new XMLHttpRequest();
xhr.open("GET/POST", "URL");
xhr.send();
//设置数据格式
xhr.responseType = "json";
xhr.onreadystatechange = function(){};
#### 服务端返回json格式数据
```
//数据
const str = {
name: "张三",
age: "20",
};
//转换成JSON数据
var data = JSON.stringify(str);
//返回JSON数据
response.send(data);
```
#### POST请求
> js代码:
```
```
> 服务端代码:
```
const express = require("express");
const app = express();
const port = 8000;
app.listen(port, () => {
console.log("服务已启动,8000端口正在被监听...");
});
app.post("/one", (request, response) => {
//设置跨域
response.setHeader("Access-Control-Allow-Origin", "*");
response.send(" 我是返回的东西 POST ");
});
```
#### GET请求
> js代码:
```
```
> 服务端代码:
大致同POST,app.get
### 使用JQuery 中的AJAX请求
1. 引入JQuery
2. $.post $.get $.ajax
```
```
### 使用Axios 发送Ajax请求
1. 引入Axios [Axios文档](https://www.axios-http.cn/docs/intro)
2. axios.get().then() axios.post().then() axios({}).then()
```
```
### 同源政策 跨域问题
> 同源政策:协议、主机、端口号,三者要相同
1. 后端解决跨域问题
> response.setHeader("Access-Control-Allow-Origin", "*"); //请求源
response.setHeader("Access-Control-Allow-Methods", "*"); //请求方式
response.setHeader("Access-Control-Allow-Headers", "*"); //请求头
```
app.all("/one_JSON", (request, response) => {
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "*");
response.setHeader("Access-Control-Allow-Headers", "*");
//数据
const str = {
name: "张三",
age: "20",
};
//转换成JSON数据
var data = JSON.stringify(str);
//返回JSON数据
response.send(data);
});
```
2. 前端用 jsonp解决跨域问题
* 什么是jsonp:
> 为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了
* jsonp 和 ajax 的区别:
> 1. ajax和jsonp这两种技术在调用方式上“看起来”很像,目的也一样,都是请求一个url,然后把服务器返回的数据进行处理,因此jQuery和ext等框架都把jsonp作为ajax的一种形式进行了封装;
> 2. ajax和jsonp其实本质上是不同的东西。ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加script标签来调用服务器提供的js脚本。
> 3. 其实ajax与jsonp的区别不在于是否跨域,ajax通过服务端代理一样可以实现跨域,jsonp本身也不排斥同域的数据的获取。
> 4. jsonp是一种方式或者说非强制性协议,如同ajax一样,它也不一定非要用json格式来传递数据,如果你愿意,字符串都行,只不过这样不利于用jsonp提供公开服务。
> 总而言之,jsonp不是ajax的一个特例,尽管jquery等把jsonp封装进了ajax,也不能改变这一点。
#### 代码:
> html部分:
```