我有2个文件time.html和time.php。我想在time.html中显示服务器日期和用户日期(我使用JS)。在php我创建从1到5的随机数,如果数字等于或大于3,php应该等待5s然后显示错误404.
注意:如果随机小于3,一切都很完美
PHP:
<?php
$rnd = rand(1, 5);
if ($rnd >= 3) {
sleep(5);
header("HTTP/1.0 404 Not Found");
}
if ($rnd < 3) {
sleep(3);
$tz = date_default_timezone_get();
date_default_timezone_set($tz);
$time = date('d.m.Y H:i:s');
echo "Timezone: " . $tz . ". On date: " . $time;
}
?>
jQuery:
$(document).ready(function () {
$("button").click(function () {
$.ajax({
type: 'POST',
url: 'time.php',
success: function (data) {
$("span").text(data);
}
});
document.getElementById("jsTime").innerHTML += Date();
});
});
答案 0 :(得分:1)
这是因为当服务器响应错误时,jquery.ajax会运行错误函数,这意味着您的成功函数不会运行。请参阅api.jquery.com/jquery.ajax/#jQuery-ajax-settings上的错误
$(document).ready(function () {
$("button").click(function () {
$.ajax({
type: 'POST',
url: 'time.php',
success: function (data) {
$("span").text(data);
},
error: function(jqxhr){
//redirect to 404 page on 404 error
if(jqxhr.status == 404){
window.location.href="HTTP/1.0 404 Not Found";
}
}
});
document.getElementById("jsTime").innerHTML += Date();
});
});
&#13;
答案 1 :(得分:1)
如上所述,当服务器返回错误并且请求失败时,Jquery Ajax允许您使用错误函数处理此错误;
尝试在设置中添加更多选项:
error
功能。statusCode
对象并使用它;这使您可以对错误处理进行更有条理的控制。所以:
$("button").click(function () {
$.ajax({
type: 'POST',
url: 'time.php',
success: function (data) {
console.info('success');
$("span").text(data);
},
error: function (jqXHR, textStatus, errorThrown) {
console.info(jqXHR.responseText);
console.info(jqXHR.status);
console.info(textStatus);
console.info(errorThrown);
$("span").text(jqXHR.responseText);
},
statusCode: {
404: function() {
alert( "page not found" );
}
}
});
document.getElementById("jsTime").innerHTML += Date();
});
并修改php文件中的if:
if ($rnd >= 3) {
sleep(1);
echo "my response text";
header("HTTP/1.0 404 Damn, Not Found"); //just for playing, then keep with HTTP standard description
}
引用jQuery.ajax文档:
错误强>
类型:功能(jqXHR jqXHR,String textStatus,String errorThrown)A 如果请求失败,则调用该函数。该功能收到 三个参数:jqXHR(在jQuery 1.4.x,XMLHttpRequest中)对象,a 描述发生的错误类型的字符串和可选项 异常对象,如果发生了一个。第二个可能的值 参数(除了null)是&#34;超时&#34;,&#34;错误&#34;,&#34;中止&#34;和 &#34; parsererror&#34 ;.发生HTTP错误时,errorThrown会收到 HTTP状态的文本部分,例如&#34; Not Found&#34;或&#34;内部 服务器错误。&#34;从jQuery 1.5开始,错误设置可以接受数组 功能。每个函数将依次调用。
注意: 此处理程序 没有调用跨域脚本和跨域JSONP请求。
答案 2 :(得分:0)
尝试将数据返回到数组中的jquery,如
成功检查条件
success: function (data) {
if(data[0]==true){
$("span").text(data[1]);
}else{
window.location.href="HTTP/1.0 404 Not Found";
}
我认为必须完成ajax调用才能重定向,上面的代码在我的机器上工作