1

ボタンがクリックされると、次のような jquery AJAX 呼び出しがあります。

$(".play").click(function(){
    function doAjax(){
        $.ajax({
        url: 'blah.php',
        success: function(data) {
            if (data==250)
            {
                setTimeout(doAjax, 2000);
            }
            else
            {
                $('#quote p').html(data);
            }

        }
        });
    }
    doAjax();
});

サーバーからのデータはすべて div に出力されます。

<div id="quote"><p> </p></div>

サーバー上の blah.php は、いくつかのステータス コードを取得するためにいくつかの処理を行います。

$r = new HttpRequest('http://localhost...', HttpRequest::METH_GET);
$r->send();

if ($r->getResponseCode() == 200)
{
echo "Starting video..."        
//sends a video to play
}
else if ($r->getResponseCode() == 450)
{
    echo "Oops! Not found...";
}
else if ($r->getResponseCode() == 550)
{
    echo "Oops! An error occurred...";
}
else if ($r->getResponseCode() == 250)
{
    echo "Initializing...";
}
else
{
    echo "Now we are in trouble";
}

応答コード ( $r->getResponseCode()) が期待どおりに返されるので、私の問題はsetTimeout. 私が望んでいるのは、コード 250 が返されたときに出力されるInitializingことですが、成功関数が 250 で呼び出されるため、AJAX 呼び出しが繰り返されます。これは機能しません。Initializing次のステップはStarting video....

他のすべてがチェックアウトしているようですが、問題は私のjquerysuccess関数にあると思いますか?

4

3 に答える 3

1

ここでの問題は、Javascript でアクセスできる "data" 変数が、実際には PHP ファイル blah.php でエコーしている正確なテキストであることです。

したがって、それを機能させるより正確な方法は、 data == "Initializing..." かどうかを確認することです。ステータス コードとメッセージの両方を取得できるように、PHP ファイルから JSON 互換のテキストを出力することを検討することもできます。

これを PHP として配置することを検討してください。

$code = $r->getResponseCode();
$message = "";

switch($code) {
    case 200:
        $message = "Starting video...";
        break;
    case 450:
        $message = "Oops! Not found...";
        break;
    case 550:
        $message = "Oops! An error occurred...";
        break;
    case 250:
        $message = "Initializing...";
        break;
    default:
        $message = "Unknown status";
        break;  
}

print "{ 'code': $code, 'message': '$message' }";

上記は、必要なすべてのデータを JSON 形式で出力します。

JavaScript では、jQuery の組み込みの getJSON メソッドを使用することを検討し、データを通常の JavaScript オブジェクトとして解析します。

$.getJSON('blah.php', function(data) {
        if (data['code'] == 250)
        {
            setTimeout(doAjax, 2000);
        }
        else
        {
            $('#quote p').html(data['message']);
        }

    }
});
于 2012-08-23T03:49:41.570 に答える
0

これがあなたの望むものだと思います。

var timeid = null;

function doAjax() {
    $.ajax({
        url: 'blah.php',
        success: function (data) {
            if (data == 'Initializing...') {
                time_id = setTimeout(doAjax, 2000);
            } else {
                $('#quote p').html(data);
                if (timeid) {
                    clearTimeout(timeid);
                }
            }
        }
    });
}
$(".play").click(doAjax);
于 2012-08-23T03:47:04.393 に答える
0

おそらく、このようにする必要があります。これは私がテストしたことで機能します...

$(".play").click(doAjax);

function doAjax(){
   alert(1);
        $.ajax({
        url: 'blah.php',
        success: function(data) {
            if (data==250)
            {
                setTimeout(doAjax, 2000);
            }
            else
            {
                $('#quote p').html(data);
            }

        }
       });   
}
于 2012-08-23T05:06:11.663 に答える