AJAX(二)

作者: Renderz_干了这碗口嚼酒 | 来源:发表于2017-05-09 17:37 被阅读8次

    原生XHR对象使用

    用聚合的身份证查询api做个小栗子
    https://www.juhe.cn/docs/api/id/38

    需求描述:

    • 一个输入框,一个提交按钮.
    • 输入框可以输入身份证号, 提交按钮提交后在界面显示身份信息.

    代码部分

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>AjaxTest</title>
    </head>
    <body>
        <input id='myInput' type="text" >
        <button id='myButton' onclick="handleSubmit()">Click To Down Load</button>
        <div id='myDisplay'></div>
    >
        <script>
            const myKey = '0a8c23653d43f9a476add0d0ed833472';
    >
            function renderHTML(data){
                let myDisplay = document.getElementById('myDisplay');
                myDisplay.innerHTML = data;
            };
    >
            function formatInfo(data){
                let parseData = JSON.parse(data); 
                let area = parseData.result.area;
                let sex = parseData.result.sex;
                let birthday = parseData.result.birthday;
                let result = '您的出生地为:' + area + '  您的性别为:' + sex + '  您的生日为:' + birthday;
                return result;
            };
    >
            function handleSubmit(){
                let myCard = document.getElementById('myInput').value;
                let myURL = 'http://apis.juhe.cn/idcard/index?key=' + myKey + '&cardno=' + myCard;
                var myXHR = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject();
    >
                myXHR.onreadystatechange = function() {
                    if (myXHR.readyState === 4) {
                        if (myXHR.status === 200) {
                            let myValue = formatInfo(myXHR.responseText);
                            renderHTML(myValue);}
                        else {renderHTML('请求失败,请重试');}
                    }
                    else { renderHTML('Loading...') ;}
                };
    >
                myXHR.open('GET',myURL);
                myXHR.send();
            };
        </script>
    </body>
    </html>
    

    说明

    其实如果输入错的格式,API那边也会返回200,但是JSON体内带返回码.
    上面的代码只是一个默认的格式,回调都可以自己乱写,如果API内带返回码还需要根据返回码做不同操作.实际上更简单了.

    思考部分

    可以看到上述代码中,handleSubmit部分其实复用度需求是很高的,但是不方便将回调函数和复用部分分离开, 就是说耦合性太强了.
    实际上handleSubmit句柄处理的主要部分主要是HTTP部分.如果这部分能单独抽离出来.
    ES6支持的promise的API对这部分实现的更好. 之后继续对promise分析代码部分.

    相关文章

      网友评论

          本文标题:AJAX(二)

          本文链接:https://www.haomeiwen.com/subject/imgbtxtx.html