Javascript jQuery-异步Ajax请求?
我尝试使用ajax请求和异步响应,但似乎不起作用。 我每秒钟都在发送ajax请求。 控制台应该每秒钟打印一次“DON'T WAIT”,每5秒钟打印一次“WAIT5”(php中的睡眠)。 但实际情况是,“不要等待”被记录,然后整个站点/脚本等待5秒钟,两条消息都被记录5次。 我如何使它异步,这样“不等待”实际上每秒钟都会出现,而不会等待其他脚本 //编辑: 这是一个例子。 我们的想法是稍后执行一个代码(而不是setInterval),它需要10秒来获得完成状态。此时,另一个设置间隔应正常工作,不等待! 睡眠为睡眠(rand(5,10)) Javascript:Javascript jQuery-异步Ajax请求?,javascript,php,jquery,ajax,asynchronous,Javascript,Php,Jquery,Ajax,Asynchronous,我尝试使用ajax请求和异步响应,但似乎不起作用。 我每秒钟都在发送ajax请求。 控制台应该每秒钟打印一次“DON'T WAIT”,每5秒钟打印一次“WAIT5”(php中的睡眠)。 但实际情况是,“不要等待”被记录,然后整个站点/脚本等待5秒钟,两条消息都被记录5次。 我如何使它异步,这样“不等待”实际上每秒钟都会出现,而不会等待其他脚本 //编辑: 这是一个例子。 我们的想法是稍后执行一个代码(而不是setInterval),它需要10秒来获得完成状态。此时,另一个设置间隔应正常工作,不等
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:
及
规则
默认情况下,Ajax请求是异步的。如果不使用$.ajaxSetup({async:false})
更改此设置,则无需在ajax请求中写入async:true
原因是,在大多数情况下,发出同步ajax请求是不好的做法,因为阻止浏览器对用户输入做出反应会恶化用户体验
您的具体解决方案
换衣服
setInterval(getProductionStatusLong,1000)
到
setInterval(getProductionStatusLong,5000)
我不相信这会起作用 相反,尝试类似的方法-它不会完全在第二个上运行,没有任何东西会运行,但它可能更接近您想要的
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()});
Ajax本身就是异步java和XML本身。无需编写异步ajax。只需删除睡眠,并将间隔设置为5000,因为您所做的没有多大意义睡眠不是最后一次,这以后应该类似于需要时间的大型MYSQL请求睡眠是一个测试。Sleep(5)更晚一些一些代码可能需要5秒以上(例如获取用户名)才能使用2个Ajax。其想法是获得一个setInterval会话读取器和多个Ajax请求,这些请求将状态写入会话。因此,不允许为了给出整个会话的进度而等待时间间隔。我不理解您的评论。请注意,您知道需要做什么,我们需要您向我们解释所有这些。最后,我希望有一些同时运行的ajax请求。脚本的结果应该在PHP脚本结束时给出,而不是在所有脚本都结束时给出。也许这就是您想要的:
<?php
session_start();
$_SESSION["jobs"] = "DONT WAIT";
$sessionstatus = json_encode($_SESSION["jobs"]);
echo $sessionstatus ;
?>
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()});