大家好,又见面了,我是全栈君。
使用Ajax须留心两类错误。它们的差别源于视角的不同。
第一类错误是从XMLHttpRequest对象的角度看到的问题:某些因素阻止了请求发送到server,比如DNS无法解析主机名,连接请求被拒绝。或者URL无效。
第二类错误是从应用程序的角度看到的问题:它们发生于请求成功发送至server,server接受请求。进行处理并生成响应,但该对应并不指向你期望的内容时。比如:假设你请求的URL不存在,这类问题就会发生。
有三种方式能够处理这些错误,例如以下代码所看到的:
代码语言:javascript复制
载入内容
var buttons=document.getElementsByTagName("button");
for(var i=0;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=""; } 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115401.html原文链接:https://javaforall.cn