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()) 按我的预期返回,所以我的问题是我重复的 ajax 调用与setTimeout. 我想要发生的是,当返回代码 250 时,它会打印出来Initializing,它确实如此,但是我的 AJAX 调用将重复,因为成功函数是用 250 调用的。这不起作用。它说Initializing但从不重复,因为下一步是我应该看到Starting video...

其他一切似乎都检查出来了,我想问题出在我的 jquerysuccess函数上?

4

3 回答 3

1

这里的问题是,您可以在 Javascript 中访问的“数据”变量实际上是您在 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 回答