AJAX简单入门知识总结

AJAX简单入门知识总结

简介:该文章为学习尚硅谷Ajax的3小时课程入门笔记,主要用于本人日后回忆记录,所以有些内容并没有太多详细解释。
源代码尚硅谷-AJAX源码笔记

1.Express框架

1.1 Express框架环境搭建

  1. 在官网中,安装node.js
  2. 使用vs打开项目文件夹,打开集成终端
  3. 在集成终端中初始化项目:npm init --yes
  4. 安装Express:npm i express

1.2 Express框架的使用

  1. 引用express:

    const express=require('express');
    
  2. 创建应用对象:

    const app=express();
    
  3. 创建路由规则:

    //request:对请求报文的封装
    //response:对响应报文的封装
    app.get('/',(request,response)=>{
        response.send("HELLO EXPRESS");
    });
    
  4. 监听端口启动服务:

    app.listen(8000,()=>{
        console.log("服务已启动,8000端口监听中.....");
    });
    

2.原生AJAX

2.1 AJAX操作基本步骤

  1. 创建对象

    const xhr=new XMLHttpRequest();
    
  2. 初始化 设置请求的方法和url

    xhr.open('GET','http://127.0.0.1:8000/server');
    
  3. 发送请求

    xhr.send();
    
  4. 事件绑定—处理服务端返回的结果

    //on  when  当什么时候
    //readystate 是xhr对象的属性,表示状态 0 1 2 3 4
    //0:未初始化
    //1:open方法调用完毕
    //2:send方法调用完毕
    //3:服务端返回了部分结果
    //4:服务器端返回了全部结果
    xhr.onreadystatechange=function(){
        if(xhr.readystate===4){
            //判断状态码  200  404 403 401 500
            //2xx 成功
            if(xhr.status>=200 && xhr.status<300){
                //处理结果
                console.log(xhr.status);//状态码
                console.log(xhr.statusText);//状态字符串
                console.log(xhr.getAllResponseHeaders());//所有响应头
                console.log(xhr.response);//响应体
     
            }
        }
    }
    

2.2 GET和POST传参方式

  1. GET:直接在url中拼接

    xhr.open("GET","http://127.0.0.1:8000/server?a=1&b=2")
    //传入参数a:1  b:2
    
  2. POST:在xhr.send(参数)中写入参数

    xhr.send("a=1&b=22")//传入参数a=1&b=22
    

2.3 设置请求头

xhr.setRequestHeader(‘头的名字’,‘头的内容’)

xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded')
//Content-Type:设置请求体内容的类型   
//application/x-www-form-urlencoded:请求参数类型

2.4 处理JSON响应

  1. 手动对数据处理。使用JSON解析函数

    let data=JSON.parse(xhr.response);//转换成JSON类型
    
  2. 自动转换。(需要在xhr.open前设置)

    xhr.responseType='json';
    

2.5 IE 缓存问题

​ 描述:IE浏览器对AJAX请求结果做一个缓存,当下次再调用请求时只拿本地的缓存,不会拿服务器上请求结果。所以会出现服务器返回结果变更了,但是在IE 浏览器中显示的还是旧数据。

​ 解决办法:在请求的url中增加一个动态的参数,时刻让url变动。如使用Data.now()获取当前时间戳。

xhr.open('GET','http://127.0.0.1:8000/ie?' + Date.now());

2.6 请求超时与网络异常优化

  1. 超时设置以及超时处理(需要在xhr.send()前设置)

    //超时设置:2s
    xhr.timeout = 2000;
    //超时处理
    xhr.ontimeout=function(){
        alert("请求超时,请重试!");
    }
    
  2. 网络异常优化(需要在xhr.send()前设置)

    xhr.onerror=function(){
        alert("网络异常,请检查网络");
    }
    

2.7 手动取消AJAX请求

xhr.abort();

2.8 AJAX 请求重复发送问题

描述:用户可能会短时间内重复点击触发AJAX请求,在这种情况下会导致服务器崩溃

解决办法:触发AJAX后会看一下之前是否有发送相同的请求,如果有把之前的请求取消掉,重新发送新的请求。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>重复请求问题</title>
</head>

<body>
    <button>点击发送</button>
    <script>
        const btn = document.getElementsByTagName('button')[0];
        let xhr = null;
        let isSending = false; //是否正在发送AJAX请求

        btn.addEventListener('click', function() {
            if (isSending) xhr.abort(); //如果正在发送,则取消该请求,创建一个新的请求
            xhr = new XMLHttpRequest();
            //修改 标识变量的值
            isSending = true;
            xhr.open('GET', 'http://127.0.0.1:8000/delay');
            xhr.send();
            xhr.onreadystatechange = function() {
                if (xhr.readyState === 4) {
                    //发送请求后,不过返回的是正确的还是错误的,修改标识变量
                    isSending = false;
                    if (xhr.status >= 200 && xhr.status < 300) {
                        console.log(xhr.response);
                    }
                }
            }
        });
    </script>
</body>

</html>

3.jQuery中的AJAX

3.1 引用jQuery

在html的title下引入jQuery

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>

3.2 get请求

$.get(url,[data],[callback],[type])

​ url:请求的URL地址

​ data:请求携带的参数

​ callback:载入成功时回调函数

​ type:设置返回内容格式。xml,html,script,json,text,default。

 //get请求
        $('button').eq(0).click(function() {
            $.get('http://127.0.0.1:8000/jquery-ajax', {
                a: 11,
                b: 12
            }, function(data) {
                console.log(data);
            }, 'json');
        });

3.3 post请求

$.post(url,[data],[callback],[type])

​ url:请求的URL地址

​ data:请求携带的参数。

​ callback:载入成功时回调函数

​ type:设置返回内容格式。xml,html,script,json,text,default

 //post请求
        $('button').eq(1).click(function() {
            $.post('http://127.0.0.1:8000/jquery-ajax', {
                a: 11,
                b: 12
            }, function(data) {
                console.log(data);
            }, 'json')
        });

3.4 jQuery 通用方法发送ajax

$.ajax({

​ url:请求的URL地址,

​ data:携带的参数,

​ type:请求发送的方式(GET,POST),

​ dataType:响应结果类型,

​ success:成功回调,

​ timeout:超时时间,

​ error:失败的问题,

​ header:头信息,

})

//通用方法发送ajax
        $('button').eq(2).click(function() {
            $.ajax({
                url: 'http://127.0.0.1:8000/jquery-ajax',
                type: 'GET',
                data: {
                    a: 111,
                    b: 222
                },
                dataType: 'json',
                success: function(data) {
                    console.log(data);
                },
                timeout: 2000,
                error: function() {
                    console.log('网络延迟,请稍后再试!');
                }
            });
        });

4.axios发送AJAX请求

4.1 描述:

使用axios可以直接

4.2 在线引入axios

<script src="https://cdn.bootcdn.net/ajax/libs/axios/1.7.2/axios.min.js"></script>

4.3 配置axios基本url:

axios.defaults.baseURL="http://127.0.0.1:8000";

4.4 get请求

axios.get(url,{

​ //url请求参数

​ params:{ },

​ //请求头信息

​ headers:{ }

}).then(value=>{回调处理});

4.5 post请求

axios.post(url,{请求体},{

​ //url参数

​ params:{},

​ //请求头参数

​ headers:{}

}).then(value=>{回调函数});

4.6 axios通用方法发送ajax

axios({

//请求方法

method:‘POST’,

url:请求地址,

data:请求体参数,

headers:头信息

}).then(response=>{回调函数})

5.fetch函数发送ajax请求

fetch(url,{ //配置对象

method:请求方法,

headers:头信息,

body:请求体

}).then(response=>{回调函数});

回调函数中,可以通过response.text()返回文本对象;response.json()返回json对象

6.跨域

6.1同源策略

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

​ 违背同源策略就是跨域。

​ 比如,京东只能向京东的网站发起请求,如果京东像淘宝发起请求那么这就是跨域。

6.2如何解决跨域

​ 6.2.1 JSONP

​ 1. JSONP是什么?

​ JSONP(JSON with Padding),是一个非官方的跨域解决方案,只支持GET请求。

​ 2. JSONP是怎么工作的?

​ 在网页有一些标签天生具有跨域能力,比如img,link,ifame,script

​ JSONP就是利用script标签的跨域能力来发送请求的。

​ 3. JSONP的使用

//1.script标签引入服务器接口地址
<script src="http://127.0.0.1:8000/jsonp-server"></script>
//2.服务器脚本需要返回的是js代码,因为script只能接受js代码
app.get("/jsonp-server",(request,response)=>{
    //这里用end,可以忽略请求头
    response.end("console.log(data)");
});

​ 4.使用jquery的方式使用jsonp

//前端页面:点击按钮获取服务器端数据
<button>点击发送jsonp请求</button>
    <div id="result"></div>
    <script>
        $('button').eq(0).click(function() {
            $.getJSON("http://127.0.0.1:8000/jquery-jsonp-server?c1=?", function(data) {
                $("#result").html(`
                名称:${data.name};<br/>
                城市:${data.city};
                `);
            });
        });
    </script>

//服务器端
// jQuery发送jsonp请求
app.all("/jquery-jsonp-server", (request, response) => {
    const data = {
        name: "尚硅谷",
        city: ["北京", "广州", "石家庄"]
    }
    let cd = request.query.c1;//获取jquery传入的函数名
    let str = JSON.stringify(data);
    response.end(`${cd}(${str})`);
});

​ 6.2.2 CORS

跨源资源共享(CORS) - HTTP | MDN (mozilla.org)

​ 1.CORS是什么?

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

​ 2.CORS是怎么工作的?

​ CORS是通过设置一个响应头来告诉浏览器,该请求允许跨域,浏览器收到该响应以后就会对响应放行。

7.nodemon工具

7.1 描述

基于node.js开发应用的一个工具,该工具可以在文件被修改后自动重启服务

7.2 安装:打开终端,输入安装语句

npm install -g nodemon

7.3 使用:nodemon 服务器文件

nodemon 服务文件
  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值