PHP指向错误404无法正常工作

时间:2015-01-17 14:27:51

标签: javascript php jquery html

我有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();
            });
        });

3 个答案:

答案 0 :(得分:1)

这是因为当服务器响应错误时,jquery.ajax会运行错误函数,这意味着您的成功函数不会运行。请参阅api.jquery.com/jquery.ajax/#jQuery-ajax-settings上的错误

&#13;
&#13;
$(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;
&#13;
&#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,如

  1. $ STR [0] =真/假;
  2. $ str [1] =&#34; HTTP / 1.0 404 Not Found&#34; /&#34;时区:&#34; 。$ tz。 &#34 ;.日期:&#34;。$ time
  3. 成功检查条件

    success: function (data) {
     if(data[0]==true){
     $("span").text(data[1]);
      }else{
    window.location.href="HTTP/1.0 404 Not Found";
    }
    

    我认为必须完成ajax调用才能重定向,上面的代码在我的机器上工作