0

我正在尝试为聊天脚本设置重定向。如果聊天在 x 时间后仍未得到答复,则页面将重定向。

我昨天在这里发布了一个关于同一件事的问题,但当时我对 JS 知之甚少,我试图将 php 与 js 混合。我改变了战术。

这是我到目前为止得到的:

function opCheck()
{
var xmlhttp;
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
alert("Your browser does not support XMLHTTP!");
}
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4)
{

opCheck();                          
        //  alert('working2');                      
}
}
opjoined = "newchattimer.php";
xmlhttp.open("GET",opjoined,true);
xmlhttp.send(null); 
}

function opResult()
{
var xmlhttp;
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
alert("Your browser does not support XMLHTTP!");
}
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4)
{
 //alert('state = 4');
var op = xmlhttp.responseText;
}
}
ajaxurl = "ajaxfiles/opAnswer_12.txt";
xmlhttp.open("GET",ajaxurl,true);
xmlhttp.send(null);
}

setTimeout(function() {
opCheck();
opResult();
//alert(op);
if (op == 'n') window.location.replace("chatnoop.php");
 }, 3000);    

它正确地创建了文本文件,但最终没有重定向。我使用了 chrome 开发者工具,没有错误。我还试图alert(op);查看结果是否被抓取,但我没有收到任何警报。

这段代码有什么问题?

谢谢。

4

2 回答 2

0

如果你花时间缩进你的代码,你会看到它var op是在函数范围内声明的onreadystatechange,它既超出范围又是异步的。

function opResult() {
    var xmlhttp;
    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
        alert("Your browser does not support XMLHTTP!");
    }
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4) {
            var op = xmlhttp.responseText; //declared here
        }
    }
    ajaxurl = "ajaxfiles/opAnswer_12.txt";
    xmlhttp.open("GET", ajaxurl, true);
    xmlhttp.send(null);
}

setTimeout(function () {
    opCheck();
    opResult();
    // op is out of scope here
    if (op == 'n') window.location.replace("chatnoop.php");
}, 3000);

由于超时通常不是处理异步函数的方式,并且当你打算在完成时做的所有事情是重定向时执行ajax请求并不是真的有必要,你可以只做一个常规的表单提交,这将重定向所有本身,或将重定向移动到正确的范围内!

xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState == 4) {
        if(xmlhttp.responseText == 'n') window.location.href = 'chatnoop.php';
    }
}
于 2013-03-02T22:49:16.427 回答
0

你可能会在这里找到你想要的http://www.tizag.com/javascriptT/javascriptredirect.php但基本上我不认为这window.location.replace("chatnoop.php");是正确的。您应该考虑使用 JQuery 来管理所有 Ajax 的东西,但它应该像您所做的那样工作

于 2013-03-02T22:49:29.850 回答