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 deveolpersツールを使用しましたが、エラーはありませんでした。また、結果が取得されているかどうかを確認しようとし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.phpwindow.location.replace("chatnoop.php");しかし、基本的にはそれが正しいとは思いません。さらに、JQuery を使用してすべての Ajax を管理することを検討する必要がありますが、とにかく行ったように機能するはずです

于 2013-03-02T22:49:29.850 に答える