【发布时间】:2013-05-29 06:02:51
【问题描述】:
好的,所以我们有这个代码:
var players = '<?php echo $players ?>';
for (var i = 0; i < 2; i++)
{
$.ajax({
type: "POST",
url: "url...",
data: { currentplayer: i, players: players },
dataType: 'json',
cache: false,
timeout:60000,
success: function(output){
<?php echo write_log("output[\"message\"]", "output[\"class\"]") ?>
$.ajax({
type: "POST",
url: "url...",
data: { currentplayer: i, players: players },
dataType: 'json',
cache: false,
timeout:60000,
success: function(output){
<?php echo write_log("output[\"message\"]", "output[\"class\"]") ?>
}
});
}
});
}
现在问题可能听起来很简单,但我找不到解决方案。
显然,第一个成功函数中的第二个 Ajax 调用发生在第一个完成之后。这真的很快,因为它只是一个 MySQL 请求。
现在秒数更长了,因为它是 PHP 文件中的一个循环(foreach 和 while)。现在它会触发第一个请求,然后是秒,然后它再次执行相同的操作(指定的循环 1 次)。现在它不会等待请求完成来继续循环。
问题:我不希望请求同时出现。
我希望这样:
循环开始:第一个 Ajax 调用完成 -> 第二个 Ajax 调用完成 -> 循环 -> 第三个 Ajax 调用完成 -> 第四个 Ajax 调用完成
基本上一个接一个。
另外:async: false 不是一个选项,因为它会冻结浏览器,我需要在每次 Ajax 查询后显示实时反馈。
有什么解决办法吗?
【问题讨论】:
-
我不明白 AJAX 与嵌入式 PHP 的意义何在...
-
顺便说一句,您的
i变量可能在成功函数中丢失了,您需要在这里关闭。整个事情看起来不对劲。 PHP中的AJAX中的AJAX???我会从头开始使用良好的做法,即。分离你的 JS 和 PHP 代码,并可能使用 Promise 分别处理这些 AJAX 调用,更好地组织。 -
在 ajax 调用之前,您不能真的期望 PHP 代码不执行... PHP 是服务器端,您的 JS 是客户端。
-
我在模态框内使用此代码,但如果我在 Ajax 之外使用 PHP,它将不会打开模态框,因为模态框仅在 PHP 准备好后才完成加载。而且由于您不能在文档加载后延迟 PHP 开始执行,这是我唯一的选择。
标签: php javascript jquery ajax for-loop