单击按钮时,我有一个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
重复调用ajax。我想要发生的是,当返回代码250时,它打印出Initializing
,它会执行,但随后我的AJAX调用将重复,因为使用250调用成功函数。这不起作用。它说Initializing
但从不重复,因为下一步是我应该看到Starting video...
。
其他所有内容似乎都会检查出来,我猜问题是我的jquery success
函数?
答案 0 :(得分:1)
这里的问题是你在Javascript中访问的“data”变量实际上是你在PHP文件中回显的确切文本,blah.php。
因此,更准确的方法是检查数据==“正在初始化...”。您可能还需要考虑从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']);
}
}
});
答案 1 :(得分: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);
答案 2 :(得分: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);
}
}
});
}