ajax学习笔记

Posted 做个机灵鬼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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有八大请求

以上是关于ajax学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

AJAX学习笔记

Ajax学习笔记

AJAX学习笔记

ajax学习笔记

ajax学习笔记

[ajax 学习笔记] ajax初试