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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关键字推广公司境外服务器维护,如何维护网站关键词排名

    关键字推广公司境外服务器维护,如何维护网站关键词排名

    2021年11月28日
    224
  • 不管这些了三国杀_三国杀身份局胜率

    不管这些了三国杀_三国杀身份局胜率一、【三国杀】是一种什么卡牌游戏?如果给三国杀下一个明确的定义的话,避不开两个词“非集换式”,“桌游”。我个人对“卡牌”有三个理解,崔斯特,集换式,非集换式。崔斯特是一个说话很有腔调的性感小胡子男人。集换式,小时候的水浒卡,三国卡,注重于收藏而非游戏性(当然后来还有了战神镖)。游戏性、竞技性比较强的,游戏王,还有如日中天的炉石(似乎也不算传统意义上的了)。非集换式的,三国杀,广泛点的

    2022年7月27日
    10
  • 打电话省钱的方法_打什么电话最消耗话费

    打电话省钱的方法_打什么电话最消耗话费作者:Saver原载:Saver省钱妙招版权所有,转载时必须以链接形式注明作者和原始出处及本声明。随着运营商们接二连三地推出一系列的优惠服务和套餐业务,不论是聊天、短信、上网、长途,还是在特定时段拨打电话,都有了让您能“占便宜”的打法。可是面对这么多的业务、这么多的特惠时段、特惠号码、套餐、特殊业务,谁能搞清楚哪个是最适合自己、最省钱的打法呢?让我们来帮您拨拨小算盘。下面的12个方案,看有没有…

    2022年10月7日
    2
  • 亚马逊云基础架构:一场从未停歇的技术创新革命[通俗易懂]

    亚马逊云基础架构:一场从未停歇的技术创新革命[通俗易懂]2022年4月20日,线上等你!

    2022年7月20日
    20
  • 最新版java安装教程[通俗易懂]

    最新版java安装教程[通俗易懂]提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、官网下载jdk二、环境配置测试前言2021java的新版安装教程:与之前的安装教程相比还是有一些改动的,省去了一些不必要的繁琐的步骤,简洁而又实用。下面是详细的安装教程,只要按照此教程逐步配置,就可以成功安装java环境。一、官网下载jdk到官网https://www.oracle.com/java/technologies/javase-jdk13-downloads.html下载下载完成解压到

    2022年7月8日
    19
  • visudo_visudo怎么编辑

    visudo_visudo怎么编辑visudo==vi/etc/suduersvisudo可以帮组检查语法%用户组机器=(授权角色的权利)命名目录sudo-l可以查看用户权限PATH是变量命令可以运行的路径PATH=目录:$PATH其中$PATH将之前所有变量追加上echo”PATH=/user/local/bin:$PATH”>>.crshr…

    2025年8月18日
    1

发表回复

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

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