我正在尝试为聊天脚本设置重定向。如果聊天在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);
看看是否抓住了结果,但我没有得到警告。
此代码有什么问题?
感谢。
答案 0 :(得分: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';
}
}
答案 1 :(得分:0)
您可以在http://www.tizag.com/javascriptT/javascriptredirect.php找到您想要的内容,但基本上我不认为window.location.replace("chatnoop.php");
是正确的。你应该考虑使用JQuery来管理所有Ajax的东西,但它应该像你已经完成的那样工作