0

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,但我宁愿避免这条路线。

4

2 回答 2

0

您可以读取对象的status属性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 文件未找到”。

于 2013-03-05T21:53:29.583 回答
0

不能使用XMLHttpRequest 返回的HTTP 状态码吗?

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

或者:

// 4xx status code
if ( (AjaxRequest.status + "").substr(0,1) == "4" ) {
  // Error page
}
于 2013-03-05T21:53:45.277 回答