XMLHttpRequest - 如何捕获返回HTML错误页面而不是数据的情况

时间:2013-03-05 21:46:43

标签: javascript xmlhttprequest http-status-code-404

Javascript:使用XMLHttpRequest获取少量数据,这些数据由网络服务器上的特定php例程回显给它。与回调函数异步。或同步,没有任何可能性。

如果php文件不存在或无法访问,则会出现问题。 responseText属性不返回错误标志,而是返回服务器404错误页面的HTML内容。

404页面内容因服务器而异,因此几乎不可能通过任何字符串测试来捕获这种情况。有没有办法标记错误发生的事实并返回null?

 // envvars is set previously
 AjaxRequest.open('post','handler.php?nocache='+nocache,true);
 AjaxRequest.setRequestHeader("User-Agent",'Firefox');
 AjaxRequest.onreadystatechange = aCallback;
 AjaxRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
 AjaxRequest.setRequestHeader("Content-length", envvars.length);
 AjaxRequest.setRequestHeader("Connection", "close");
 AjaxRequest.send(envvars);
}

function aCallback() {
 if(AjaxRequest.readyState == 4){
   var response = AjaxRequest.responseText;
   if(response == 0){
     // It is useless to test for failure here because a complete 404 page is returned, 
     // instead of a null or -1 response. 
     document.ajax.response.value="Fail";   
    } else {
     document.ajax.response.value=response;   
   }
 }
}

// handler.php:
if ($_POST["request"]=="countbananas"):
  echo "bananas=43" ;
endif;

ps我知道会提到jQuery,但我宁愿避开这条路线。

2 个答案:

答案 0 :(得分:0)

您可以阅读status property of the XMLHttpRequest对象以获取HTTP响应代码:

function aCallback() {
 if(AjaxRequest.readyState == 4){
   if(AjaxRequest.status !== 200){
     // something went wrong
     document.ajax.response.value="Fail";   
    } else {
     var response = AjaxRequest.responseText;
     document.ajax.response.value=response;   
   }
 }
}

这当然假定您的源代码正在返回正确的HTTP代码,例如“404 File not found”。

答案 1 :(得分:0)

你不能使用XMLHttpRequest返回的HTTP status code吗?

if ( AjaxRequest.status + "" == "404" ) {
  // Error page
}

或者:

// 4xx status code
if ( (AjaxRequest.status + "").substr(0,1) == "4" ) {
  // Error page
}