day 24 Ajax(状态码、请求头、ajax封装)

1、xhr对象的属性

数据的发送

get:send(无参)

post:send(key1=value1&key2=value2...)

xhr.send([参数])

onreadystatechange:readystate的状态码发生改变,触发该事件,只有2,3,4的状态码会发生改变

    // readystate:xhr对象的状态码

    // 0:new了一个对象

    // 1:调用完open方法

    // 2:调用send方法,数据发送了出去

    // 3:数据发送到了服务器

    // 4:服务器解析完成,返回响应

responseText:返回响应内容

status:代表http协议是否通畅

2、AjaxPost

post传参:绝对不允许在open方法中拼接

1.open方法后设置请求头,将参数以from表单的方式发送

xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

2.将真正的请求参数传入send

key1=value1&key2=value2

xhr.send("username="+this.value)

3、Ajax返回JSON

php文件中:

方法一:直接通过json字符串返回

echo '{"name":"laowang","age":18}'

方法二:通过php数组返回

$arr=["name"=>"laowang","age"=>6];

//json_encode将数组转换为json字符串

echo json_encode($arr);

3、封装Ajax函数

//功能:发送请求,接收响应
    //参数:
    // type:get/post 支持大小写
    // url:服务器地址
    // isAsyn:是否异步
    // data:请求参数
    // callBack:接收响应的回调函数

    function ajaxFun(type, url, isAsyn, data, callBack) {

        //1.创建对象
        let xhr = new XMLHttpRequest();

        type = type.toLowerCase();

        if (type == "get") {
            let urlParams = url;
            if (data != "") {
                //"6.ajaxFun?name=laowang&pwd=666"
                urlParams += "?" + data;
            }
            //2.
            xhr.open(type, urlParams, isAsyn);
            //3.
            xhr.send();
        } else if (type == "post") {
            xhr.open(type, url, isAsyn);
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.send(data);
        } else {
            console.log("类型错误");
        }

        //4.状态码事件
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4 && xhr.status == 200) {
                //5.
                callBack(xhr.responseText);
            }
        }
    }

4、promise

    // promise作用:将函数嵌套调用的方式,改为平级调用,避免回调地狱问题。

    // 换而言之,功能未发生改变,换种语法传递回调函数。

    //promise语法:

    // 1.promise是一个对象

    // 2.promise通常放在一个函数体内

    // 3.将promise对象作为函数的返回值返回

//then是promise对象的一个方法

    //通过then方法把原来的回调函数传进去

    //Promise对象.then(callBack1,[callBack2]);

<script>    
// promise作用:将函数嵌套调用的方式,改为平级调用,避免回调地狱问题。
    // 换而言之,功能未发生改变,换种语法传递回调函数。

    //promise语法:
    // 1.promise是一个对象
    // 2.promise通常放在一个函数体内
    // 3.将promise对象作为函数的返回值返回

    function f1() {
        console.log("f1");
        let p = new Promise(function(callBack1) {
            callBack1();
        });

        return p;
    }

    function f2() {
        console.log("f2");
        let p = new Promise(function(callBack1) {
            callBack1();
        });

        return p;
    }

    function f3() {
        console.log("f3");
        let p = new Promise(function(callBack1) {
            callBack1();
        });

        return p;
    }

    function f4() {
        console.log("f4");
    }
    //then是promise对象的一个方法
    //通过then方法把原来的回调函数传进去
    //Promise对象.then(callBack1,[callBack2]);
    f1().then(f2).then(f3).then(f4); //f1(f2);
</script>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值