0

我有一个简单的项目要编码。在主页上我有一些图片。在后台,我使用 Ajax 每 5 秒查询一个名为“check.php”的文件。在 check.php 中,从数据库中获取一些数据,如果数据等于 0,我想将整个站点重定向到“example.php”,但如果数据等于 1,我只想用文本更新 ajax 响应 div称为“不变”。

问题: 每当我尝试这样做时,它不会重定向到“example.php”,而是在 ajax 响应 div 中显示 example.php。我正在使用 header("Location:example.php"); 为了这。

我的代码:

//function auto for ct fetch starts

function reload_ct() {



var xmlhttp;

if (window.XMLHttpRequest)
  {
  xmlhttp=new XMLHttpRequest();
  }

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("ct").innerHTML=xmlhttp.responseText;
    }
  }
     var c_user = document.getElementById('c_name').value;
   xmlhttp.open("GET","check.php?cu=" + c_user,true);
xmlhttp.send();
}
window.setInterval(reload_ct, 100);
//function auto for ct fetch ends
4

2 回答 2

2

这应该有效(在 jQuery 中):

$.post('check.php',{'c_user':c_user})
$.done(function(data) {

if(data == '0'){
window.location.href = "example.php";
}

});

一般格式是

$.post('URL_SENDING_TO',function (data returned from request) {

dosomething();

});

如果要发送数据,可以使用.done,如下所示:

$.post('URL_SENDING_TO',{'datatosend':'value1','datatosend2':'value2'})
.done(function (data returned from request) {

dosomething();

});

当然,如果你想在没有 jQuery 的情况下这样做,这应该可以工作(参考http://www.w3schools.com/ajax/ajax_xmlhttprequest_send.asphttp://www.w3schools.com/ajax/tryit.asp?文件名=tryajax_database):

var xmlhttp;

if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
}
else {// code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}


xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        if (xmlhttp.responseText == '0') {
            window.location.href = "example.php";
        }
    }
}

var time_five_sec = setInterval(
    function () { 
        xmlhttp.open("POST", "check.php", true);
        xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xmlhttp.send("c_user=" + c_user);
    }, 5000);

如果您想将最后一个函数更改为 setTimeout(如 Jasper 推荐的那样),您可以编写:

function timed_ajax_request() {
    setTimeout(function () { ajaxrequest() }, 5000);
}

function ajaxrequest() {
    xmlhttp.open("POST", "check.php", true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.send("c_user=" + c_user);
    timed_ajax_request();
}
timed_ajax_request();

这将在一个循环中发送它,它timed_ajax_request首先调用函数,然后当发送 ajax 请求时,它timed_ajax_request再次调用,因为它是 a Timeout,它会在调用请求之前等待 5000 毫秒(或 5 秒)。

如果您想使用GET而不是POST,更改行:

    xmlhttp.open("POST", "check.php", true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.send("c_user=" + c_user);

至:

    xmlhttp.open("GET", "check.php?c_user=" + c_user, true);
    xmlhttp.send("c_user=" + c_user);

这应该是一样的。这同样适用于 jQuery,将其更改为:

$.post('check.php',{'c_user':c_user})
$.done(function(data) {

if(data == '0'){
window.location.href = "example.php";
}

});

至:

$.get('check.php',{'c_user':c_user})
$.done(function(data) {

if(data == '0'){
window.location.href = "example.php";
}

});

因此,总而言之,要完全按照您在问题中想要做的事情,包括 Jasper 的建议,您可以这样写:

var xmlhttp;

if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
}
else {// code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}


xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        if (xmlhttp.responseText == '0') {
            window.location.href = "example.php";
        }
    }
}

function timed_ajax_request() {
    setTimeout(function () { ajaxrequest() }, 5000);
}

function ajaxrequest() {
    xmlhttp.open("GET", "check.php?cu=" + c_user, true);
    xmlhttp.send();
    timed_ajax_request();
}
timed_ajax_request();
于 2013-09-12T17:28:18.203 回答
2

我会将重定向命令从 AJAX php 文件传递​​回原始文件

return("转到 example.php");

然后在原始文件中获取这些数据并在其 = "go to example.php" 时进行 JS 重定向。

于 2013-09-12T17:30:50.530 回答