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分析代码部分.

相关文章

  • 五、使用jQuery实现Ajax

    一、本课目标 学会使用$.ajax()完成Ajax请求。 二、$.ajax()简介

  • Ajax上

    一、封装ajax 二、调用封装好的ajax

  • Ajax

    一、Ajax对象 二、Ajax对象的属性和方法 1、Ajax对象的属性: ①readyState:Ajax状态码0...

  • Ajax

    标签: Ajax 正文 一、实现一个原生Ajax 二、Ajax状态 三、将原生的 ajax 封装成 promise

  • AJAX的知识梳理

    【目录】 一、用AJAX加载CSS二、用AJAX加载JS三、用AJAX加载HTML四、用AJAX加载XML五、用A...

  • Django中的Ajax

    一、原生Ajax 二、Jquery中的Ajax 1、$.ajax():type为POST时,表示发送数据,type...

  • Ajax

    一. Ajax简介 Ajax是无需重新加载网页的情况下,使部分网页能够更新 二. 什么是Ajax AJAX = A...

  • 12_django_ajax

    AJAX 一、什么是ajax? 异步的JavaScript和xml,跟后台交互,都用json 二、ajax干啥用的...

  • html5的ajax学习(三)

    一.原生的ajax封装 原生的ajax的调用 二.jquery的ajax 2.1 jquery的语法 三. fun...

  • ajax: 封装

    一、封装ajax 二、main.js 引入封装好的 ajax 三、GET请求 引用封装好的 ajax 四、POST...

网友评论

      本文标题:AJAX(二)

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