javascript之处理Ajax错误

javascript之处理Ajax错误

大家好,又见面了,我是全栈君。

使用Ajax须留心两类错误。它们的差别源于视角的不同。

第一类错误是从XMLHttpRequest对象的角度看到的问题:某些因素阻止了请求发送到server,比如DNS无法解析主机名,连接请求被拒绝。或者URL无效。

第二类错误是从应用程序的角度看到的问题:它们发生于请求成功发送至server,server接受请求。进行处理并生成响应,但该对应并不指向你期望的内容时。比如:假设你请求的URL不存在,这类问题就会发生。

有三种方式能够处理这些错误,例如以下代码所看到的:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>上海远地资产管理有限公司</title>
    <meta name="author" content="jason"/>
    <meta name="description" content="上海远地资产管理有限公司(简称:远地资产),是一家专业的互联网金融服务平台."/>
    <link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon"/>
</head>
<body>
    <div>
        <button>Apples</button>
        <button>Cherries</button>
        <button>Bananas</button>
        <button>Cucumber</button>
        <button id="badhost">Bad Host</button>
        <button id="badurl">Bad URL</button>
    </div>
    <div id="target">
        载入内容
    </div>
    <div id="errormsg"></div>
    <div id="statusmsg"></div>
    <script>
        var buttons=document.getElementsByTagName("button");
        for(var i=0;i<buttons.length;i++){
            buttons[i].onclick=handleButtonPress;
        }
        var httpRequest;
        function handleButtonPress(e){
            clearMessages();
            httpRequest=new XMLHttpRequest();
            httpRequest.onreadystatechange=handleResponse;
            httpRequest.onerror=handleError;
            try{
                switch (e.target.id){
                    //处理请求错误:请求已生成。但主机名不能被DNS解析
                    case "badhost":
                        httpRequest.open("GET","http://a.nodomain/doc.html");
                        break;
                    //处理设置错误:向XMLHttpRequest对象传递了错误的数据,比方格式不对的URL
                    case "badurl":
                        httpRequest.open("GET","http://");
                        break;
                    //处理应用程序错误:请求已成功完毕,但当你请求某个不存在的文档时,会获得404的状态码。
                    default:
                        httpRequest.open("GET", e.target.innerHTML+".html");
                        break;
                }
                httpRequest.send();
            }catch(error){
                displayErrorMsg("try/catch",error.message);
            }
        }
        function handleError(e){
            displayErrorMsg("Error event",httpRequest.status+httpRequest.statusText);
        }
        function handleResponse(){
            if(httpRequest.readyState==4){
                var target=document.getElementById("target");
                if(httpRequest.status==200){
                    target.innerHTML=httpRequest.responseText;
                }else{
                    document.getElementById("statusmsg").innerHTML="Status:"+httpRequest.status+" >>"+httpRequest.statusText;
                }
            }
        }
        function displayErrorMsg(src,msg){
            document.getElementById("errormsg").innerHTML=src+": "+msg;
        }
        function clearMessages(){
            document.getElementById("errormsg").innerHTML="";
            document.getElementById("statusmsg").innerHTML="";
        }
    </script>
</body>
</html>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115401.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Idea正则表达式一键替换注释,生成@ApiModelProperty(““)「建议收藏」

    平常日常开发中,返回给前端的vo对象在字段上需要加注释@ApiModelProperty(“xxx”),方便在前端同事在swagger文档看注释,一般我是domain对象生成之后,复制代码到vo对象里,然后再修改Java块注释为前端的注释@ApiModelProperty(“xxx”),那怎么从以下的代码注释转为@ApiModelProperty(“xxx”)注释呢?如果字段很多的话,一个一个写会比较耗时也枯燥,可以用正则表达式一键替。/***xxx*/(1)doma

  • 用javascript去掉字符串空格的办法

    今天遇到了以关于JavaScript中怎么去掉字符串中前后两段的空格,我只好向就得js中也后Trim()函数,后来试试了不行,就网上找了下解决方法,其中用到了正则表达式,整理了下:12

    2021年12月21日
  • 多媒体开发之—h264 图像参数级语义

    多媒体开发之—h264 图像参数级语义

  • 绿色简单的学校登录html页面

    效果预览:http://hovertree.com/texiao/css/22/代码如下:源码下载:http://hovertree.com/h/bjaf/l243x19a.htm转自:http:

    2021年12月22日
  • 电容的分类与区别[通俗易懂]

    版权声明:本版面文章皆为原创、或参考其他技术网站、博客后自己动手做实验所得,转载请注明出处——028后勤仓库管理员。作为电子硬件工程师,熟悉各类电容的区别和使用方法是很有必要的。下面来简单介绍下几种常用电容的区别。一、电容的分类与作用       电容是由两个金属极,中间夹有绝缘材料(介质)构成的。由于绝缘材料的不同,所构成的电容器的种类也有所不同

  • c51单片机选择题_大学生单片机毕业设计

    c51单片机选择题_大学生单片机毕业设计?Hi,大家好,这里是丹成学长的毕设系列文章!?对毕设有任何疑问都可以问学长哦!这两年开始,各个学校对毕设的要求越来越高,难度也越来越大…毕业设计耗费时间,耗费精力,甚至有些题目即使是专业的老师或者硕士生也需要很长时间,所以一旦发现问题,一定要提前准备,避免到后面措手不及,草草了事。以下是学长亲手整理的C51单片机相关的毕业设计选题,都是经过学长精心审核的题目,适合作为毕设,难度不高,工作量达标,对毕设有任何疑问都可以问学长哦!相对容易工作量达标题目新颖,含创新点?https。…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号