如何处理XHR错误显示消息? [英] How to handle XHR error display messages?
问题描述
我正尝试使用XHR从另一个来源获取一些内容,如下所示:
I'm trying to fetch some content from another source using XHR as shown below:
function fetchPage(str)
{
if(str=="")
{
document.getElementById("table").innerHTML="";
resetFilters();
$('#progress').hide(); //fetching progress bar <div>
return;
}
if (window.XMLHttpRequest) // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
else // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.onreadystatechange=postCallback;
xmlhttp.open("GET", "fetch.php?url=http://www.sis.itu.edu.tr/tr/ders_programlari/LSprogramlar/prg.php?fb="+str, true);
xmlhttp.send();
// any stuff that goes here will happen before callback
// (this is a good place to update a UI element showing a call is resolving.)
// (for example a spinner or text saying "fetching")
$('#progress').show();
progressFetching();
switch(xmlhttp.readyState){ //loading bar adjustments
case 0:
$('.bar').css("width","0%");
$('.bar').text("0%");
break;
case 1:
$('.bar').css("width","25%");
$('.bar').text("25%");
break;
case 2:
$('.bar').css("width","50%");
$('.bar').text("50%");
break;
case 3:
$('.bar').css("width","75%");
$('.bar').text("75%");
break;
}
}
function postCallback()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200){
progressDone(); //loading is finished
$('#error').hide();
document.getElementById("table").innerHTML=xmlhttp.responseText;
// continue to process post callback.
resetFilters();
}
else {
// report error with fetch
/*if(xmlhttp.status==404 || xmlhttp.responseText == "")
$('#error').show();*/
//$('#error').show();
}
}
我希望我的页面在发生连接超时或计算机没有互联网连接(可能在闲逛时发生断开连接)或网页无法获取对方内容的任何其他情况下显示错误来源.
I want my page to display error when connection timeout occurs, or when the computer doesn't have an internet connection (maybe a disconnection occurred while hanging around) or any other situation where the webpage fails to fetch the contents of the other source.
使用上面的代码,在else
块中,如果我在/* */
注释部分中使用if(xmlhttp.status==404 || xmlhttp.responseText == "")
,则不会收到错误,除非它不是404错误.如果我进入//
注释部分,则在开始获取过程直至完成之前,即在xmlhttp.readyState = 0
至xmlhttp.readyState = 4
之间,将显示错误.如何使用这些属性或其他属性显示连接错误消息?
Using the code above, in the else
block, if I go for if(xmlhttp.status==404 || xmlhttp.responseText == "")
in the /* */
comment section, I won't get an error unless its not a 404 error. If i go for //
comment section, error will be displayed after the fetching process is started until it is completed, i.e. between xmlhttp.readyState = 0
through xmlhttp.readyState = 4
. How can I display connection error messages using these attributes or something else?
感谢您的关注:)
推荐答案
问题是我在先前问题中的模板存在缺陷.我相信这样做会更好,因为它创建了一个闭包来传递您需要使用的变量.
The problem is my template in prior question was flawed. I believe this will work better because it creates a closure to pass the variable you need to work with.
再一次,我没有对此进行测试,因此它可能存在输入错误和错误-除了调用postCallback()
的方式并向其添加参数之外,我也没有进行任何更改.
Once again, I did not test this so it might have typos and bugs -- nor did I change anything except how postCallback()
is invoked and added a parameter to it.
function fetchPage(str)
{
if(str=="")
{
document.getElementById("table").innerHTML="";
resetFilters();
$('#progress').hide(); //fetching progress bar <div>
return;
}
var xmlhttp;
if (window.XMLHttpRequest) // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
else // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.onreadystatechange=function () { postCallback(xmlhttp); };
xmlhttp.open("GET", "fetch.php?url=http://www.sis.itu.edu.tr/tr/ders_programlari/LSprogramlar/prg.php?fb="+str, true);
xmlhttp.send();
// any stuff that goes here will happen before callback
// (this is a good place to update a UI element showing a call is resolving.)
// (for example a spinner or text saying "fetching")
$('#progress').show();
progressFetching();
switch(xmlhttp.readyState){ //loading bar adjustments
case 0:
$('.bar').css("width","0%");
$('.bar').text("0%");
break;
case 1:
$('.bar').css("width","25%");
$('.bar').text("25%");
break;
case 2:
$('.bar').css("width","50%");
$('.bar').text("50%");
break;
case 3:
$('.bar').css("width","75%");
$('.bar').text("75%");
break;
}
}
function postCallback(xmlhttp)
{
if (xmlhttp.readyState==4 && xmlhttp.status==200){
progressDone(); //loading is finished
$('#error').hide();
document.getElementById("table").innerHTML=xmlhttp.responseText;
// continue to process post callback.
resetFilters();
}
else {
// report error with fetch
/*if(xmlhttp.status==404 || xmlhttp.responseText == "")
$('#error').show();*/
//$('#error').show();
}
}
这篇关于如何处理XHR错误显示消息?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!