AJAX入门以及get和post请求

优点:

1在不刷新的情况下,与服务端进行通信; **突出优势**

2允许根据用户事件来更新部分页面

缺点: 

1没有浏览历史不能回退;

2存在跨域问题(同源),即从a.com向b.com 发送请求是不可以的 

3.SEO不友好 (Search Engine Optimization)  搜索引擎优化 

 

 同源: 协议,端口号,域名,必须完全相同

违背同源策略就是跨域.

 跨域解决方案: 

1JSONP (只支持get请求)

 利用script标签来实现跨域, link img iframe 等

 2.CORS(官方推出)  完全在服务端处理

 

请求报文和响应报文的格式: 行  头  空行  体

 

 

Access-Control-Allow-Origin 响应头指定了该响应的资源是否被允许与给定的origin共享。

 语法: 

 Access-Control-Allow-Origin: *  //允许所有资源都可以访问的资源
 Access-Control-Allow-Origin: <origin>  

如需允许特定域名 如(https://developer.mozilla.org)访问您的资源, 您可以设置:

Access-Control-Allow-Origin: https://developer.mozilla.org


案例1: get()方法

在启动前:(已经安装了node.js,它包括了npm)
需要用npm安装express,即在终端中执行命令:npm install express 。
安装好后并且执行node
server.js(当然还是很可能不成功,建议去看尚XX的视频,细节太多了说不完)
html:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title></title>
    <style>
        #result {
            width: 200px;
            height: 100px;
            border: solid 1px aqua;
        }
    </style>
</head>

<body>
    <button>点击发送请求</button>
    <div id="result"></div>
    <script>
        var result = document.querySelector('#result')
        var btn = document.querySelector('button')
        btn.onclick = function () {
            //创建对象
            const xhr = new XMLHttpRequest();
            //初始化
            xhr.open('GET', 'http://127.0.0.1:8000/server?a=100&b=200&c=300');
            //发送
            xhr.send();
            //
            //readystate是 xhr对象中的属性,表示状态:
            // 0被初始化  1open调用完毕 2send方法调用完毕  3服务端返回的部分的结果 4服务端返回的所有结果
            //change 可以触发4次
            xhr.onreadystatechange = function () {
                //判断 (服务端返回了所有的结果)
                if (xhr.readyState === 4) {
                    //判断响应状态码 200 404 401 500 302(一直没法请求,在重新读缓存)
                    //2XX 都是成功,具体的200-300都是成功
                    if (xhr.status >= 200 && xhr.status < 300) {
                        //处理结果 行 头 空行 体
                        //1.响应行
                        console.log(xhr.status); //状态码
                        console.log(xhr.statusText);//状态字符串
                        console.log(xhr.getAllResponseHeaders());//所有响应头
                        console.log(xhr.response); //响应体

                        //设置 reslut的文本
                        result.innerHTML = xhr.response; //点击即可出现  hello GET
                    } else {
                    }
                }
            }
        }
    </script>
</body>

</html>
 
server.js:(文件名最好是这个,不然要去调代码,把server换成你想的)
//1.引入express

const express = require('express');

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

//3.创建路由规则
app.get('/server', (request, response) => {
    //设置响应头  为了设置允许跨域
    response.setHeader('Access-Control-Allow-Origin', '*');

    //设置响应体
    response.send('hello GET ');
});
 
//4.监听端口启动服务
app.listen(8000, () => {
    console.log('服务已经启动, 8000 端口监听中....')
})
 
 
get和post请求的对比:
 
get——从指定的资源请求数据;
post——向指定的资源提交要被处理的数据。

查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:

/test/demo_form.php?name1=value1&name2=value2

查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:

POST /test/demo_form.php HTTP/1.1
Host: kkxx.com
name1=value1&name2=value2
get: 可以缓存,不够安全, 请求有长度限制,可以前进后退,只应用于取回数据。数据类型只允许ASCII 字符。
post:不可缓存,安全,请求长度没有限制。对数据类型也没有限制

 

 

posted @ 2022-03-08 13:06  我的猫在哪里  阅读(105)  评论(0)    收藏  举报