zoukankan      html  css  js  c++  java
  • AJAX

    一、ajax定义

    Ajax即Asynchronous Javascript And XML(异步JavaScript和XML)在 2005年被Jesse James Garrett提出的新术语,用来描述一种使用现有技术集合的‘新’方法,包括: HTML 或 XHTML, CSS, JavaScript, DOM, XML, XSLT, 以及最重要的XMLHttpRequest。 使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。

     Ajax 的核心是 js 对象:XMLHttpRequest

    二、同步和异步

    同步和异步的概念(这跟字面意思完全相反)

    • 同步:必须等待前面的任务完成,才能继续后面的任务(一个一个做,不能同时做多个)。

    • 异步:不受当前任务的影响(同时做多个事情)。

    拿排队举例:

    • 同步:在银行排队时,只有等到你了,才能够去处理业务。

    • 异步:在排队的时候,可以听听音乐,可以看看书。

    异步更新网站

    我们以前访问一个网站时,当浏览器加载完HTML、CSS、JS以后,网站的内容就固定了。如果想让网站内容发生更改,就必须刷新页面才能够看到更新的内容。

    可如果用到异步更新,情况就大为改观了。比如,我们在访问新浪微博时,看到一大半了,点击底部的加载更多,会自动帮我们加载更多的微博,同时页面并没有刷新。

    三、发送 Ajax 请求的五个步骤

    (一)创建Ajax对象,也就是XMLHttpRequest对象;

    (二)设置请求类型、请求地址和是否异步;

    (三)发送请求和请求参数;

    (四)监听请求状态变化,我们需要写一些逻辑来处理不同状态下要做的事情;

    (五)接收返回的数据。

    四、请求类型

    • GET,例如:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    <h1>Ajax 发送 get 请求</h1>
    <input type="button" value="发送get_ajax请求" id='btnAjax'>
    
    <script type="text/javascript">
        // 绑定点击事件
        document.querySelector('#btnAjax').onclick = function () {
            // 发送ajax 请求 需要 五步
    
            // (1)创建异步对象
            var ajaxObj = new XMLHttpRequest();
    
            // (2)设置请求的参数。包括:请求的方法、请求的url。
            ajaxObj.open('get', '02-ajax.php');
    
            // (3)发送请求
            ajaxObj.send();
    
            //(4)注册事件。 onreadystatechange事件,状态改变时就会调用。
            //如果要在数据完整请求回来的时候才调用,我们需要手动写一些判断的逻辑。
            ajaxObj.onreadystatechange = function () {
                // 为了保证 数据 完整返回,我们一般会判断 两个值
                if (ajaxObj.readyState == 4 && ajaxObj.status == 200) {
                    // 如果能够进到这个判断 说明 数据 完美的回来了,并且请求的页面是存在的
                    // 5.在注册的事件中 获取 返回的 内容 并修改页面的显示
                    console.log('数据返回成功');
    
                    // 数据是保存在 异步对象的 属性中
                    console.log(ajaxObj.responseText);
    
                    // 修改页面的显示
                    document.querySelector('h1').innerHTML = ajaxObj.responseText;
                }
            }
        }
    </script>
    </body>
    </html>
    View Code

    02-ajax.php:echo 'smyhvae'; 效果如下:

    • POST,例如:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    <h1>Ajax 发送 get 请求</h1>
    <input type="button" value="发送put_ajax请求" id='btnAjax'>
    <script type="text/javascript">
    
        // 异步对象
        var xhr = new XMLHttpRequest();
    
        // 设置属性
        xhr.open('post', '02.post.php');
    
        // 如果想要使用post提交数据,必须添加此行
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    
        // 将数据通过send方法传递
        xhr.send('name=fox&age=18');
    
        // 发送并接受返回值
        xhr.onreadystatechange = function () {
            // 这步为判断服务器是否正确响应
            if (xhr.readyState == 4 && xhr.status == 200) {
                alert(xhr.responseText);
            }
        };
    </script>
    </body>
    </html>
    View Code

     

    五、Ajax对象的几个重要方法和属性:

    (一).open(method, url, async);

      method:请求的类型,有GET和POST两种

      url:文件在服务器上的位置

      async:是否选择异步,true为异步,false为同步

    (二).setRequestHeader("Content-type", "application/x-www-form-urlencoded");

      当选择POST类型时需要使用此方法添加HTTP头,然后在send方法中添加想要发送的数据

    (三).send(string);

      当选择POST类型时添加参数;

    (四)readyState属性、status属性;

    (五)onreadystatechange事件;

       注册onreadystatechange事件以后,只要ajax对象的readyState属性发生改变,就会调用onreadystatechange对应的函数。

    (六).responseText和.responseXML分别为字符串形式的数据和XML形式的数据。

    六、实例代码

    (一)原生Javascript的ajax写法

    1需要做一下兼容

     1 <script>
     2     //定义一个变量来存储ajax对象
     3     var xhr=null;
     4     if(window.XMLHttpRequest){
     5         xhr=new XMLHttpRequest;
     6     } else{
     7         xhr=new ActiveXObject("Microsoft.XMLHTTP");
     8     }
     9     xhr.open("GET", "url", true);
    10     xhr.send();//括号内可以添加字符串,只是在POST请求时使用。
    11     xhr.onreadystateChange=function(){
    12         if(xhr.readystate===4 && xhr.status===200){
    13             console.log(xhr.responseText);
    14         }
    15     }
    16 </script>    

    七、jquery的几个ajax方法

    (一).load()方法:从服务器加载数据,并把返回的数据放入被选元素中。

    语法:$(selector).load(URL,data,callback);

    (二).get()和.post()方法:通过 HTTP GET 或 POST 请求从服务器请求数据。

    • GET - 从指定的资源请求数据
    • POST - 向指定的资源提交要处理的数据

    GET 基本上用于从服务器获得(取回)数据。注释:GET 方法可能返回缓存数据。

    POST 也可用于从服务器获取数据。不过,POST 方法不会缓存数据,并且常用于连同请求一起发送数据。

    语法:$.get('url',[data], callback);$.post('url',data, callback)

    (三).ajax()方法:

      语法:$.ajax({

        url:'url',

        method:'GET/POST',

        data:{},

        success: function(res){

            

        }

      })

    八、Ajax的典型应用场景 

    (一)、用户登录

    (二)、搜索框提示

    (三)、翻页

    (四)、分类树或者树形结构

    (五)、自动更新的页面

  • 相关阅读:
    前端打印去除水印
    mybatis实现多数据库操作(个人封装注解版本)
    vue项目用hbuilder打包成APP后,返回键退出程序的解决办法
    Java迭代器Iterator的remove()方法的使用
    零基础学Java语言(浙江大学mooc)
    Oracle查询一个字段在哪张表里
    slf4j重定向日志输出
    SpringBoot嵌入pentaho-kettle工具实现数据trans转换和job任务手动执行
    Apache的karaf启动报错
    SpringBoot扩展接口- Bean实例化前后扩展点
  • 原文地址:https://www.cnblogs.com/shangsi/p/14707348.html
Copyright © 2011-2022 走看看