Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery-异步Ajax请求?_Javascript_Php_Jquery_Ajax_Asynchronous - Fatal编程技术网

Javascript jQuery-异步Ajax请求?

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秒来获得完成状态。此时,另一个设置间隔应正常工作,不等

我尝试使用ajax请求和异步响应,但似乎不起作用。 我每秒钟都在发送ajax请求。 控制台应该每秒钟打印一次“DON'T WAIT”,每5秒钟打印一次“WAIT5”(php中的睡眠)。 但实际情况是,“不要等待”被记录,然后整个站点/脚本等待5秒钟,两条消息都被记录5次。 我如何使它异步,这样“不等待”实际上每秒钟都会出现,而不会等待其他脚本

//编辑: 这是一个例子。 我们的想法是稍后执行一个代码(而不是setInterval),它需要10秒来获得完成状态。此时,另一个设置间隔应正常工作,不等待! 睡眠为睡眠(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:



规则 默认情况下,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()});