ajax学习(一)

本文深入讲解了AJAX技术,包括异步加载数据的基本原理、浏览器兼容性问题、封装函数优化及GET与POST请求的区别。同时,探讨了同步与异步的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AJAX

1、ajax异步加载数据---初步

//1、声明一个ajax对象
var xhr = new XMLHttpRequest();

/*
    第一个参数 请求数据的方式(很多种)
        1、get请求
        2、post请求
        3、也可以去传输数据
    第二个参数 请求url地址
    第三个参数 是否异步
        true 异步
        false同步
*/
xhr.open("get", "1.txt", true);
//<3>发送请求
xhr.send();
//<4>等待响应
/*
    readystatechange 事件类型
    xhr.readyState 值发生变化的时候,上述的事件就会触发
    0  调用open方法之前
    1  调用send方法之后,发送请求的时候
    2  调用完send方法之后,已经接收到所有响应之后
    3  正在解析响应数据
    4  解析数据完成以后
    xhr.responseText  纯文本 字符串
    xhr.responseXML
*/
xhr.onreadystatechange = function(){
    if(xhr.readyState == 4){
        alert(xhr.responseText);
    }
}

2、ajax异步加载数据---兼容浏览器

/*
    IE6以下不兼容
    new XMLHttpRequest()
    IE6以下使用
    new ActiveXObject("Microsoft.XMLHTTP");
*/
//1、声明一个ajax对象
var xhr = null;
if(window.XMLHttpRequest){
    xhr = new XMLHttpRequest();
}else{
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
}

3、ajax异步加载数据---完美+封装函数

function ajax({method = "get", url, data, success, error}){
    //创建ajax    
    var xhr = null;
    try{
        xhr = new XMLHttpRequest();
    }catch(error){
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
    //判断请求方式
    if(method == "get" && data){
        url += "?" + data + "&" + new Date().getTime();
    }
    xhr.open(method, url, true);
    //判断发送请求
    if(method == "get"){
        xhr.send();
    }else{
        xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
        xhr.send(data);
    }
    //等待响应
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4){
            if(xhr.status == 200){
                //处理下载完数据的方式都是一样的
                /*
                    如何去处理下载完成的数据不确定
                    具体要写什么代码不确定
                    回调函数  把函数当做参数传入
                */
                if(success){
                    success(xhr.responseText)
                }
            }else{
                if(error){
                    error("Error:" + xhr.status);
                }
            }
        }
    }
}

4、表单中的get和post

get:

    get 默认是http://localhost/code2/1.get.php?username=tian&age=20&password=123456

    get的发送数据方式:直接将数据以查询字符串的格式,拼接在url后面进行传输的。

    缺点:

        1、不安全

        2、最大只能传输2kb

        3、没有办法上传

    优点:简单方便

post:

    表单在进行post提交数据的时候,设置请求头,设置编码形式

    enctype="application/x-www-form-urlencoded"

    post发送数据方式:通过浏览器内部传输数据

    优点:

        1、安全

        2、理论没有最大限制

        3、上传

5、ajax中get和post

get:

/*
    1、url中的中文 进行编码encodeURI
    2、IE中,自动去缓冲下载到的数据,如果多次请求url相同,会返回第一次请求下来的数据(数据不更新)。所以在后面拼接一个当时秒,防止url相同
*/
xhr.open("get", "1.get.php?username=" + encodeURI("钢铁侠") + "&password=123456abc&age=40&" + new Date().getTime(), true);
xhr.send();

post:

xhr.open("post", "1.post.php", true);
//send方法之前设置请求头
xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
/*
    post的数据是通过send方法进行提交
*/
xhr.send("username=钢铁侠&age=40&password=123456abc");

二、ajax中的同步和异步

同步:阻塞,必须等前面的程序执行完毕以后,才能执行后面的程序。

异步:非阻塞,前面程序是否执行完毕,不影响后面程序执行的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值