ajax学习笔记

什么是AJAX

AJAX 全称为Asynchronous Javascript And XML,就是异步的 JS 和 XML。
通过AJAX可以在浏览器中向服务器发送异步请求,最大的优势:页面无刷新获取数据。 AJAX
不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式

AJAX的优点

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

AJAX的缺点

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

ajax发送get请求(重点)
 <script>
      let btn = document.querySelector("button");
      let box = document.querySelector(".container");
      btn.onclick = () => {
        // 1.创建xhr实例对象
        const xhr = new XMLHttpRequest();
       //2.绑定监听
        xhr.onreadystatechange = () => {
          // 判断是否处于 第四状态,readayState有5个状态
          if (xhr.readyState === 4) {
            // 请求状态码 200到300之间表示请求成功
            //xhr.status请求状态响应码 200~300表示请求发送成
            if(xhr.status>=200 && xhr.status<300){
            console.log(xhr.response);
            box.innerHTML = `<h3>${xhr.response}</h3>`;
            }
          }
        };
        // 指定发生的:mothod url 参数
        // key=value&key=value  query参数的urlencoded编码形式
        // /小刘/age18 params参数
        //也可以不带任何参数
        xhr.open('GET','http://127.0.0.1:80/login_get?name=小刘&age=18');
        // xhr.open("GET", "http://127.0.0.1:80/login2/小刘/18");
        // 发生请求
        xhr.send();
      };
    </script>
ajax发送post请求(重点)

post请求也可以携带 query和params参数 最重要的是可以携带请求体参数

<script>
      let btn = document.querySelector("button");
      let box = document.querySelector(".container");
      btn.onclick = () => {
        // 1.创建xhr实例对象
        const xhr = new XMLHttpRequest();

        xhr.onreadystatechange = () => {
          // 判断是否处于 第一个状态
          if (xhr.readyState === 4) {
            // 请求状态码 200到300之间表示请求成功
            // console.log(xhr.response);
            box.innerHTML = `<h3>${xhr.response}</h3>`;
          }
        };
        //  post 可以携带 query参数和params参数
        // **携带请求体参数
        xhr.open("POST", "http://127.0.0.1:80/login_post");
        // 请求体的参数写在send里面
        //需要追加响应头用于识别请求体参数的编码的编码形式--urlencoded
        //  xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
         // xhr.send();
        //发生请求

        // 需要追加响应头用于识别请求体参数的编码的编码形式--json
        xhr.setRequestHeader('Content-type','application/json');
        let person = {name:'tom',age:18};
        xhr.send(JSON.stringify(person));
      
      };
    </script>
ajax解析json数据
 <script>
             let btn = document.querySelector('button');
             let box = document.querySelector('.container');
             btn.onclick = ()=>{
               //函数体
            //    引入xhr
               const xhr= new XMLHttpRequest();
            //    绑定监听
                xhr.onreadystatechange = ()=>{
                  
                  if(xhr.readyState === 4){
                      if(xhr.status>=200&&xhr.status<300){
                          //采用解构赋值的方式接受数据
                          let {name,age,sex} = xhr.response;
                          console.log(xhr.response);
                          box.innerHTML = `<ul>
                               <li>姓名:${name}</li>
                               <li>年龄:${age}</li>
                               <li>性别:${sex}</li>
                               
                               
                            </ul>`
                      }
                  }
                }
                //设置请求的mothod url
                xhr.open('GET','http://127.0.0.1:80/login_person');
                // 用于指定的返回数据格式
                xhr.responseType = 'json';
                xhr.send();
             }
         </script>
ajax请求的jquery封装
 //jquery封装ajax请求(完整版)
         $.ajax({
            url:'http://127.0.0.1:80/login_jquery_get',
            method:'GET',
            data:{school:'atguigu'},//携带的数据
            dataType:'json',//配置响应数据的格式,告诉浏览器服务器返回的是json格式,浏览器自动解析成对象
            //success里面有三个参数
            success:(result,a,xhr)=>{
                console.log(result);
                console.log(a);//请求的状态,success false
                console.log(xhr);//xhr
                console.log({school:'atguiug'});
                content.append(`品牌:${result.name},价格:${result.price}`)
            },//请求成功的回调
            error:(xhr)=>{console.log('请求出错',xhr);},
        }) 
        // 精简版

    /*     $.get('http://127.0.0.1:80/login_jquery_get__/小刘',{school:'atguigu'},(data)=>{
            console.log(data);
        },'json')
    } */

同源策略

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

非同源受到哪些限制?

1. Cookie不能读取;
2. DOM无法获得;
3. Ajax请求不能获取数据//可以发送不能获取

跨域的解决重点

1.JSONP是什么
JSONP(JSON with Padding),是一个非官方的跨域解决方案,纯粹凭借程序员的聪明才智开发出来,只支持get请求
2.JSONP怎么工作的?
在网页有一些标签天生具有跨域能力,比如:img link iframe script等。
JSONP就是利用了script标签发送请求不受同源策略的限制的特点。

 <!-- jsonp解决跨域的问题实质就是 通过动态创建script标签发请求,绕开了xhr
        同源策略,有种前端定义函数,后端调用函数的感觉
        -->
    <script type="text/javascript">
      let btn = document.querySelector("button");
      /*  function demo(a){
           console.log(a);
       } */
      btn.onclick = () => {
      //jsonp解决跨域的步骤
        let btn = document.querySelector("button");
        let scriptNode = document.createElement("script");
        scriptNode.src = "http://localhost:80/login_jsonp_get?callback=demo";
        //   往页面添加script标签
        document.body.appendChild(scriptNode);
        window.demo = (a) => {
          console.log(a);
        };
      };
    </script>

cros解决跨域

CORS(Cross-Origin Resource Sharing),跨域资源共享。CORS是官方的跨域解决方案,它的特点是不需要在客户端做任何特殊的操作,完全在服务器中进行处理,支持所有常见的请求。
2.CORS怎么工作的?
CORS是通过设置一个响应头来告诉浏览器,该请求允许跨域,浏览器收到该响应以后就会对响应放行。
3.服务器端常用设置
response.set("Access-Control-Allow-Origin", "*");
response.set(“Access-Control-Expose-Headers”, “");
response.set(“Access-Control-Allow-Methods”, "
”);
等等
备注:后端一般借助:cors库批量编写响应头
get 和post为简单请求 设置一个响应头即可,但put delete等等为复杂请求 会存在预请求(一次请求会发生两次),所有需要设置一组响应头才可以解决跨域 http有八大请求

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值