【发布时间】:2013-02-20 12:03:26
【问题描述】:
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,但我宁愿避开这条路线。
【问题讨论】:
-
检测不到HTTP状态码是404吗?
-
认为我找到了答案。如果正常,AjaxRequest.status 属性将为 200。看起来编写我的代码所基于的示例的人不知道如何正确捕获错误。花了一段时间才发现这个属性存在,很少有例子提到它。无论如何谢谢。
标签: javascript xmlhttprequest http-status-code-404