首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery -异步Ajax请求?

jQuery -异步Ajax请求?
EN

Stack Overflow用户
提问于 2014-01-16 20:36:14
回答 2查看 7.1K关注 0票数 3

我尝试使用ajax请求和异步响应,但似乎不起作用。我每隔一次发送一次ajax请求。控制台应该每秒输出"DON'T WAIT“和"WAIT5”(在php中睡眠)。但发生的情况是,“不要等待”被记录下来,然后整个站点/脚本等待5秒,两个消息都被记录了5次。我如何才能使这一步异步,这样“不要等待”真的每秒都会出现,而不是等待另一个脚本?

//编辑:这是一个示例。稍后的想法是执行一段代码(而不是setInterval ),它需要10秒来获得完成状态。在这段时间内,另一个setInterval应该可以正常工作,而不是等待!睡眠为睡眠(rand(5,10));

Javascript:

代码语言: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:

代码语言:javascript
复制
<?php
session_start();
sleep(5);
$_SESSION["jobs"] = "WAIT5";
$sessionstatus = json_encode($_SESSION["jobs"]);
echo $sessionstatus ;
?>

代码语言:javascript
复制
<?php
session_start();
$_SESSION["jobs"] = "DONT WAIT";
$sessionstatus = json_encode($_SESSION["jobs"]);
echo $sessionstatus ;
?>
EN

回答 2

Stack Overflow用户

发布于 2014-01-16 20:38:31

规则

默认情况下,Ajax请求是异步的。如果不使用$.ajaxSetup({async:false})更改这一点,就不需要在ajax请求中编写async: true

原因是,在大多数情况下,发出同步ajax请求是一种糟糕的做法,因为您可能会阻止浏览器对用户输入做出反应,从而降低用户体验。

您的特定解决方案

只要改变就好

window.setInterval(getProductionStatusLong,1000);

window.setInterval(getProductionStatusLong,5000);

票数 3
EN

Stack Overflow用户

发布于 2014-01-16 20:43:32

我不相信这能行得通。

相反,试着这样做-它不会在第二次运行,什么都不会,但它可能更接近你想要的

代码语言:javascript
复制
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()});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21161964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档