Hello AJAX!

1.AJAX简介

名字由来是Asynchronous JavaScript And XML首字母缩写,即异步的JSXML,通过AJAX可以 在 浏览器中向 服务器 发送异步请求,最大的优势:无刷新获取数据。比如懒加载之类,在目前的网页中随处可见。

无刷新地和服务器进行交互。

向接口发送请求,获得相应的数据。

AJAX 不是新的编程语言, 而是一种将现有的标准组合在一起使用的新方式。

这里提一嘴XML。XML 被设计用来传输和存储数据,和 HTML 类似, 不同的是 HTML 中都是预定义标签, 而 XML 中没有预定义标签,全都是自定义标签, 用来表示一些数据。现在已经被 JSON 取代了。
注:先了解一下http(超文本传输协议)知识,如请求报文和响应报文。

补充:

axios:内部是AJAX,功能单一,就是发送请求,容量小,很方便与其他框架结合,比如vue,详见我的vue相关文章

axios和其他库(比如jQuery,vue框架)一样,必须先导包再用包,使用get/post方法就可以发送对应的请求,then方法的回调函数包括response和error,可以看返回的参数。代码见vue文件夹

2.AJAX优缺点

优点:

  1. 可以无需刷新页面而与服务器端进行通信。
  2. 允许你根据用户事件来更新部分页面内容。

缺点:

  1. 没有浏览历史, 不能回退
  2. 存在跨域问题(同源)
  3. SEO 不友好

3.AJAX的使用

先做一下准备工作,安装node的一个小工具——nodemon,它是一款Node.js的 监控工具, 

作用:node.js 源代码的任何变化和自动重启你的服务器。例如:修改服务端程序server.js后,不用再在终端重启node,就自动更新。

AJAX的核心对象:XMLHttpRequest,AJAX 的所有操作都是通过该对象进行的。

AJAX的使用步骤:

  • 创建 XMLHttpRequest 对象
 const x = new XMLHttpRequest();
  • 设置请求信息
 x.open("GET", "http://127.0.0.1:8000/");
  • 发送请求
 xhr.send(body) 
 //get 请求不传 body 参数, 只有 post 请求使用
  • 接收响应

 x.onreadystatechange = function() {
                if (x.readyState === 4) {
                    if (x.status >= 200 && x.status < 300) {
                        //输出响应体
                        console.log(x.response);
                    }
                }
            }
        }

上面这四个步骤是 客户端中使用AJAX的基本步骤

4.一些理解

ajax用来实现 页面和 web 服务器之间数据 的传输/交互,那么在vscode中就要写两个文件,一个作为页面,另一个作为服务端,

上述的四个步骤是写在页面中的。

下面是服务端(文件名为server.js)的创建。

首先我们安装一下express框架,

注:express是基于 Node.js 平台,一个快速、开放、极简的 Web 开发框架。

这时候在server.js里写上:

//1. 引入express
const express = require('express');

//2. 创建应用对象
const app = express();

注意把html文件和server.js文件写在一个文件夹中,然后在vscode中右键文件夹打开终端,输入nodemon server.js即建立了前后端的连接。

注:如果想再重新开启一个node,则要先关闭之前的node,操作:Ctrl+c

server.js中的第三步:创建路由规则,以get类型和all为例(自行查找get和post的区别)

//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');
});

5.JQuery中的AJAX

个人理解,jQuery中的AJAX不再需要上面的四个基础步骤,html和js代码如下

$('button').eq(0).click(function() {
    $.get('http://127.0.0.1:8000/jquery-server', {
        a: 100,
        b: 200
    }, function(data) {
        console.log(data);
    }, 'json');
    // 'json'这个参数表示响应体类型   json在这里就是对象
});

//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));
});

6.axios和AJAX

Axios是Ajax的一个工具库,本质上 就是用来发送Ajax请求的,

代码略。

7.fetch和AJAX

略~

8.跨域问题

首先要知道 同源策略 这个概念。

同源策略(Same-Origin Policy)最早由 Netscape 公司提出, 是浏览器的一种安全策略。同源: 协议、 域名、 端口号 必须完全相同。违背同源策略就是跨域。

解决跨域问题的方法:

  • 1.JSONP   (可以理解为“野路子”)是一个非官方的跨域解决方案, 程序员开发出来, 只支持 get 请求

原理:在网页有一些标签天生具有跨域能力, 比如: img link iframe script。JSONP 就是利用 script 标签的跨域能力来发送请求的。

JSONP 的使用
1.动态的创建一个 script 标签

var script = document.createElement("script");


2.设置 script 的 src, 设置回调函数

script.src = "http://localhost:3000/testAJAX?callback=abc";
function abc(data) {
      alert(data.name);
};


3.将 script 添加到 body 中

document.body.appendChild(script);


4.服务器中路由的处理
 

router.get("/testAJAX" , function (req , res) {
      console.log("收到请求");
      var callback = req.query.callback;
      var obj = {
            name:"孙悟空",
            age:18
      } 
      res.send(callback+"("+JSON.stringify(obj)+")");
});

附加:<!-- 用jQuery 发送 jsonp请求 非常方便 -->

  • 2.cors    "正规军"

CORS(Cross-Origin Resource Sharing) , 跨域资源共享。 CORS 是官方的跨域解决方案, 它的特点是不需要在客户端做任何特殊的操作, 完全在服务器中进行处理, 支持get 和 post 请求。 跨域资源共享标准新增了一组 HTTP 首部字段, 允许服务器声明哪些源站通过浏览器有权限访问哪些资源。
CORS 是通过设置一个响应头来告诉浏览器, 该请求允许跨域, 浏览器收到该响应以后就会对响应放行。
 

<!-- jsonp相当于野路子  这个cors是正规军 -->
<!-- 最开始的包括现在要讲的 跨域方法  本质上都是设置响应头 -->
<!-- 刚刚的jsonp 不是这种设置响应头的方法 -->
<!-- cors设置跨域非常简单  加上响应头就可以 -->

服务端代码如:

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');
});

9.后续更多的AJAX知识待更新~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值