Ajax定时事件重定向

时间:2013-03-02 22:41:02

标签: javascript ajax timer

我正在尝试为聊天脚本设置重定向。如果聊天在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 deveolpers工具,没有错误。我也尝试alert(op);看看是否抓住了结果,但我没有得到警告。

此代码有什么问题?

感谢。

2 个答案:

答案 0 :(得分:0)

如果你花时间缩进你的代码,你会发现var oponreadystatechange函数的范围内被声明,这个范围超出了范围并且是异步的。

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';
    }
}

答案 1 :(得分:0)

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