zoukankan      html  css  js  c++  java
  • Ajax

    Ajax是什么??

    Ajax是一个局部刷新技术,通过向服务器发送并且获得请求来刷新某一个局部页面,而不是整个页面的刷新。

    假如没有Ajax,那么每次评论的时候都会刷新整个页面

     

    要完整实现一个AJAX异步调用和局部刷新,通常需要以下几个步骤:

          (1)创建XMLHttpRequest对象,也就是创建一个异步调用对象.

          (2)创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息.

          (3)设置响应HTTP请求状态变化的函数.

          (4)发送HTTP请求.

          (5)获取异步调用返回的数据.

          (6)使用JavaScript和DOM实现局部刷新.

    1、原生XHR实现:

    var xhr;
    if(window.XMLHttpRequest){
        xhr=new XMLHttpRequest();
    }
    else{
        xhr=new ActiveXObject('Microsoft.XMLHTTP');//兼容IE6,IE5
    }
    xhr.open(method,url,true);
    xhr.send();
    xhr.onreadystatechange=function(){
        if(xhr.readyState==4&&xhr.status==200){
            var val=xhr.responseText;
        }
    }

     ajax设置携带cookie:xhr.withCredentials=true;//支持跨域发送cookie

     2、jQuery的Ajax请求

    $.ajax({
        type:"GET",
        url:"",
        dataType:"json",//期望返回的数据类型
        data:data,
        contentType:"application/json",//发送的数据类型
        //允许携带cookie
        xhrFields:{
            withCredentials:true
        },
        success:function(){
        },
        error:function(){
        }
    })

             

    ajax用于web页面中实现异步数据交互,实现页面局部内容刷新。

    优点:能够进行内容局部加载刷新,减少带宽,避免用户不断刷新以及页面跳转,提高用户体验

    缺点:对搜索引擎不好,浏览器不支持ajax的后退

    用Promise封装原生Ajax

    实现getAjax().then()可以获取Ajax返回的数据

    function getAjax(){
        return new Promise(function(resolve,reject){
            var xhr=new XMLHttpRequest();
            xhr.open('GET','./js/data.json',true);
            xhr.send();
            xhr.onreadystatechange=function(){
                if(xhr.readyState==4&&xhr.status==200){
                    resolve(xhr.responseText);
                }
            }
        })
    }
    getAjax().then(function(data){
        console.log(JSON.parse(data));
    })

    用原生JS封装AJAX

    function AJAX(options){
        options=options||{};
        options.type=(options.type||"GET").toUpperCase();
        options.dataType=options.dataType||"json";
                    
        var params=formatParams(options.data);
        if(window.XMLHttpRequest){
            var xhr=new XMLHttpRequest();
        }
        else{
            var xhr=new ActiveXObject('Microsoft.XMLHTTP');
        }
        if(options.type=="GET"){
            xhr.open("GET",options.url+"?"+params,true);
        }
        else if(options.type=="POST"){
            xhr.open("POST",options.url,true);
        }
        xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        xhr.send(params);
        xhr.onreadystatechange=function(){
            if(xhr.readyState==4&&xhr.status==200){
                                options.success&&options.success(xhr.responseText);
            }
            else{
                options.fail&&options.fail(xhr.status);
            }
        }
    }
    function formatParams(data){//格式化参数
        var arr=[];
        for(var i in data){
            arr.push(i+"="+data[i]);
        }
        return arr.join('&');
    }
        
    //调用AJAX方法        
    AJAX({
        url:"data.json",
        type:"GET",
        dataType:"json",
        success:function(data){
            console.log(JSON.parse(data));
        }
    })
  • 相关阅读:
    shell 统计行数
    sqlldr errors
    sqlldr 远程数据库
    load Properties
    查看shell 版本
    linux中的网络通信指令
    给EditText的drawableRight属性的图片设置点击事件
    p2p网贷3种运营模式
    p2p网贷3种运营模式
    linux常用的压缩与解压缩命令
  • 原文地址:https://www.cnblogs.com/xiaoan0705/p/8513752.html
Copyright © 2011-2022 走看看