我尝试使用ajax请求和异步响应,但似乎不起作用。我每隔一次发送一次ajax请求。控制台应该每秒输出"DON'T WAIT“和"WAIT5”(在php中睡眠)。但发生的情况是,“不要等待”被记录下来,然后整个站点/脚本等待5秒,两个消息都被记录了5次。我如何才能使这一步异步,这样“不要等待”真的每秒都会出现,而不是等待另一个脚本?
//编辑:这是一个示例。稍后的想法是执行一段代码(而不是setInterval ),它需要10秒来获得完成状态。在这段时间内,另一个setInterval应该可以正常工作,而不是等待!睡眠为睡眠(rand(5,10));
Javascript:
function getProductionStatus() {
jQuery.ajax({
url: "report.sessioncall.php",
dataType: "json",
async: true
})
.done(function(data) {
console.log(data);
});
}
function getProductionStatusLong() {
jQuery.ajax({
url: "report.sessioncall1.php",
dataType: "json",
async: true
})
.done(function(data) {
console.log(data);
});
}
window.setInterval(getProductionStatus, 1000);
window.setInterval(getProductionStatusLong, 1000);PHP:
<?php
session_start();
sleep(5);
$_SESSION["jobs"] = "WAIT5";
$sessionstatus = json_encode($_SESSION["jobs"]);
echo $sessionstatus ;
?>和
<?php
session_start();
$_SESSION["jobs"] = "DONT WAIT";
$sessionstatus = json_encode($_SESSION["jobs"]);
echo $sessionstatus ;
?>发布于 2014-01-16 20:38:31
规则
默认情况下,Ajax请求是异步的。如果不使用$.ajaxSetup({async:false})更改这一点,就不需要在ajax请求中编写async: true。
原因是,在大多数情况下,发出同步ajax请求是一种糟糕的做法,因为您可能会阻止浏览器对用户输入做出反应,从而降低用户体验。
您的特定解决方案
只要改变就好
window.setInterval(getProductionStatusLong,1000);
至
window.setInterval(getProductionStatusLong,5000);
发布于 2014-01-16 20:43:32
我不相信这能行得通。
相反,试着这样做-它不会在第二次运行,什么都不会,但它可能更接近你想要的
var cnt = 0
function getProductionStatus() {
$.ajax({
url: "report.sessioncall.php",
dataType: "json"
})
.done(function(data) {
console.log(data);
cnt++
if (cnt==5) {
getProductionStatusLong()
cnt=0;
}
else {
setTimeout(getProductionStatus, 1000);
}
});
}
function getProductionStatusLong() {
$.ajax({
url: "report.sessioncall1.php",
dataType: "json"
})
.done(function(data) {
console.log(data);
getProductionStatus();
});
}
$(function() {getProductionStatus()});https://stackoverflow.com/questions/21161964
复制相似问题