Ajax_00000

contents

Ajax介绍

AJAX(Asynchronous JavaScript And XML)。

XML简介

XML:可扩展标记语言。

XML被设计用来传输和存储数据。

XML和HTML类似,不同的是HTML中都是预定义标签,而XML中没有预定义标签,全都是自定义标签,用来表示一些数据,现在已经被JSON取代了。

HTTP协议

HTTP(hypertext transport protocol:超文本传输)协议:协议详细规定了浏览器和万维网服务器之间互相通信的规则。

一、请求报文:

请求行:

请求头:

空行:

请求体:

二、响应报文:

请求行:

请求头:

空行:

请求体:

Node.js

官网地址:https://nodejs.org

下载安装后,查看安装的Node.js的版本:

打开控制台窗口,输入命令:nodejs -v

Express

官网地址:https://www.expressjs.com.cn

安装

打开Visual Studio Code开发工具。

左侧空白处点击鼠标右键,选择"Open in integrated Terminal"。

输入命令:npm init --yes

按回车键。

输入命令:npm i express

按回车键。

服务代码

js 复制代码
//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 端口监听中....");
});

启动Express

启动Express:使用node命令:

关闭服务:Ctrl+C

案例

案例准备

页面
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>AJAX GET 请求</title>
    <style>
        #result{
            width:200px;
            height:100px;
            border:solid 1px #90b;
        }
    </style>
</head>
<body>
    <button>点击发送请求</button>
    <div id="result"></div>

    <script>
        //获取button元素
        const btn = document.getElementsByTagName('button')[0];
        const result = document.getElementById("result");
        //绑定事件
        btn.onclick = function(){
            //1. 创建对象
            const xhr = new XMLHttpRequest();
            //2. 初始化 设置请求方法和 url
            xhr.open('GET', 'http://127.0.0.1:8000/server?a=100&b=200&c=300');
            //3. 发送
            xhr.send();
            //4. 事件绑定 处理服务端返回的结果
            // on  when 当....时候
            // readystate 是 xhr 对象中的属性, 表示状态 0 1 2 3 4
            // change  改变
            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);//响应体
                        //设置 result 的文本
                        result.innerHTML = xhr.response;
                    }else{

                    }
                }
            }


        }
    </script>
</body>
</html>
Express
js 复制代码
//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 EXPRESS');
});

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

在浏览器地址栏中输入:
http://127.0.0.1:8000/server


http://localhost:8000/server

Ajax基本使用

server

js 复制代码
//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 EXPRESS');
});

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

页面

html 复制代码
<!DOCTYPE html>

<html lang="en">

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>AJAX GET 请求</title>
        <style>
            #result{
                width:200px;
                height:100px;
                border:solid 1px #90b;
            }
        </style>
    </head>

    <body>

        <button>点击发送请求</button>
        <div id="result"></div>

        <script>

            //获取button元素。
            const btn = document.getElementsByTagName('button')[0];
            const result = document.getElementById("result");

            //绑定事件
            btn.onclick = function(){

                //1. 创建对象
                const xhr = new XMLHttpRequest();
                //2. 初始化:设置请求方法和url
                xhr.open('GET', 'http://127.0.0.1:8000/server?a=100&b=200&c=300');
                //3. 发送
                xhr.send();
                //4. 事件绑定,作用是处理服务端返回的结果。
                // on  when 当....时候
                // readystate 是 xhr 对象中的属性, 表示状态 0 1 2 3 4
                // change  改变
                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);//响应体
                            //设置 result 的文本
                            result.innerHTML = xhr.response;
                        }else{}
                    }
                }


            }

        </script>

    </body>

</html>

测试

相关推荐
脑袋大大的6 分钟前
判断当前是否为钉钉环境
开发语言·前端·javascript·钉钉·企业应用开发
军军君0115 分钟前
基于Springboot+UniApp+Ai实现模拟面试小工具二:后端项目搭建
前端·javascript·spring boot·spring·微信小程序·前端框架·集成学习
quweiie1 小时前
tp8.0\jwt接口安全验证
前端·安全·jwt·thinkphp
xiaoyan20151 小时前
最新Flutter3.32+Dart3仿微信App聊天实例
前端·flutter·dart
汪敏wangmin1 小时前
Fiddler-抓包后直接生成Loadrunner脚本或者Jmeter脚本
前端·jmeter·fiddler
彤银浦2 小时前
Web学习笔记3
前端·笔记·学习·html5
江城开朗的豌豆2 小时前
退出登录后头像还在?这个缓存问题坑过多少前端!
前端·javascript·vue.js
江城开朗的豌豆2 小时前
Vue的'读心术':它怎么知道数据偷偷变了?
前端·javascript·vue.js
江城开朗的豌豆3 小时前
手把手教你造一个自己的v-model:原来双向绑定这么简单!
前端·javascript·vue.js
我在北京coding3 小时前
el-tree 懒加载 loadNode
前端·vue.js·elementui