2013-03-02 2 views
0

Im пытается настроить перенаправление для скрипта чата. Если чат остается без ответа после x времени, страница будет перенаправлена.Ajax Timed Event Redirect

Я вчера задал вопрос о том же, но в то время, когда я мало знал о 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);  

Это не создает текстовый файл должным образом, но в конечном счете не редирект. Я использовал хром-девелоперский инструмент и никаких ошибок. Я также попробовал alert(op);, чтобы узнать, будет ли результат схвачен, но я не получаю предупреждения.

Что не так с этим кодом?

Спасибо.

ответ

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 запроса, когда все, что вы собираетесь делать, когда оно заканчивает перенаправлять все равно is'nt вам необходимо, вы можете просто сделать правильную форму submit, который будет перенаправлять сам по себе, или переместить перенаправление внутри правильной области!

xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4) { 
     if(xmlhttp.responseText == 'n') window.location.href = 'chatnoop.php'; 
    } 
} 
+0

Он запускает некоторые php для проверки БД, чтобы узнать, принял ли оператор запрос чата. Если оператор присоединился к чату, то переадресация не производится. Так что это динамичная ситуация. Я думал, что ajax будет лучшим способом. – Sabyre

+0

Затем вам нужно либо добавить успешный обратный вызов каких-либо ролей, либо просто перенести перенаправление в нужную область. Добавлен код выше. – adeneo

+0

Большое вам спасибо, с вашей помощью это действительно имело смысл! Оно работает! – Sabyre

0

Вы можете найти то, что вы хотите здесь http://www.tizag.com/javascriptT/javascriptredirect.php, но в основном я не думаю, что window.location.replace("chatnoop.php"); правильно. Вы должны рассмотреть возможность использования JQuery для управления всем материалом Ajax, но он должен работать так, как вы это делали.