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>

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 485拓扑结构图_拓扑图

    485拓扑结构图_拓扑图一条单向的铁路线上,依次有编号为 1, 2, …, n 的 n 个火车站。每个火车站都有一个级别,最低为 1 级。现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车站 x,则始发站、终点站之间所有级别大于等于火车站 x 的都必须停靠。(注意:起始站和终点站自然也算作事先已知需要停靠的站点)例如,下表是 5 趟车次的运行情况。其中,前 4 趟车次均满足要求,而第 5 趟车次由于停靠了 3 号火车站(2 级)却未停靠途经的 6 号火车站(亦为 2 级)而不满足要求。现有 m

    2022年8月9日
    4
  • curl: (60) SSL certificate problem: unable to get local issuer certificate 错误

    curl: (60) SSL certificate problem: unable to get local issuer certificate 错误

    2021年10月30日
    152
  • leetcode-155最小栈(历史最值)「建议收藏」

    leetcode-155最小栈(历史最值)「建议收藏」原题链接设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,null,nul

    2022年8月8日
    3
  • 一文详解深度相机之TOF成像[通俗易懂]

    一文详解深度相机之TOF成像[通俗易懂]点击上方“计算机视觉工坊”,选择“星标”干货第一时间送达文章导读本文通过介绍TOF相机的成像过程,带大家了解TOF相机中脉冲法和连续波调制这两种技术原理,并详细的分析每种方法的实现细节和各…

    2022年5月15日
    51
  • 加密网站地址——从根本解决盗连

    加密网站地址——从根本解决盗连这是我在CSDN上的一篇远程文章《加密网站地址——从根本解决盗连》网站防止图片等内容盗链的方法多种多样,其中最常用的方法就是通过HTTP访问头信息,判断访问来源。理解TCP/IP通信员里的读者都知道,由于HTTP头信息处理是在OSI模型的应用层,所以,编造一些假的HTTP头信息发送给服务器,并不需要什么特殊的技术或者工具。下面的演示中,是利用wget命令模拟Fire…

    2022年6月13日
    34
  • P2192 HXY玩卡片

    P2192 HXY玩卡片

    2022年3月7日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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