Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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 Ajax调用以等待侦听器脚本完成并通知用户_Javascript_Php_Jquery_Mysql_Ajax - Fatal编程技术网

Javascript Ajax调用以等待侦听器脚本完成并通知用户

Javascript Ajax调用以等待侦听器脚本完成并通知用户,javascript,php,jquery,mysql,ajax,Javascript,Php,Jquery,Mysql,Ajax,我有一个程序,可以让用户从一个网页(main.php)提交一个测试用例,该网页将发送一个ajax请求,在MySQL中插入一行用户数据(insert.php),并且done=0。然后,我有一个侦听器脚本(testexec.php),它每分钟在crontab上运行一次,以处理/运行(ssh到每个服务器并在服务器上运行测试)每个服务器上的测试用例,并在测试完成后将行更新为done=1 我的ajax调用将在行插入完成后立即完成,并将告诉用户等待 我希望能够让用户知道监听器脚本何时完成测试用例,并将结果显

我有一个程序,可以让用户从一个网页(main.php)提交一个测试用例,该网页将发送一个ajax请求,在MySQL中插入一行用户数据(insert.php),并且
done=0
。然后,我有一个侦听器脚本(testexec.php),它每分钟在crontab上运行一次,以处理/运行(ssh到每个服务器并在服务器上运行测试)每个服务器上的测试用例,并在测试完成后将行更新为
done=1

我的ajax调用将在行插入完成后立即完成,并将告诉用户等待

我希望能够让用户知道监听器脚本何时完成测试用例,并将结果显示回页面

以下是我的AJAX调用:

main.php

 //POST the data to insert.php
    $.ajax({
        url:"insert.php",
        type: "POST",
                  data: {
                      gateway: $("#gateway").val(),
                      option: $('input[type=radio]:checked').val() 
                  },
                  dataType: "text", 
                  success:function(result){
                      $('#div0').html("Your test is being processed, please wait..");
                      //clearInterval(interval);
                      console.log(result);
                      alert('Test case submitted!');
                  }
              });
                 return true;
            }
      });

返回AJAX请求的“responseText”值。这样它将是同步的

//POST the data to insert.php
         return $.ajax({
              url:"insert.php",
              type: "POST",
              data: {
                  gateway: $("#gateway").val(),
                  option: $('input[type=radio]:checked').val() 
              },
              dataType: "text"
          }).responseText

您可以在定时间隔上设置另一个ajax调用,每隔几秒钟轮询一次服务器,并让服务器在准备就绪后返回结果,并清除ajax调用上的间隔(作为成功函数的一部分),或者创建到服务器的事件侦听器/websocket连接,并在服务器输出可用时刷新服务器输出


或者,将测试脚本的运行合并到php ajax处理程序脚本中,必要时增加ajax调用的超时时间,并且在测试脚本完成之前不返回任何输出。测试完成后,它将在服务器上创建一个日志输出,其中包含结果。实际上,我如何将结果返回到我的ajax(main.php)?您是否也将输出存储在数据库中?如果要识别用户,您需要实现一些方法,以便将相关测试结果返回给他们。php似乎根本不包含php,所以为了保持简单,我建议您创建report.php,并使用第二次ajax调用轮询它。如果测试未完成,则返回0,如果测试已完成,则返回结果的html,然后在ajax成功处理程序集中,如果数据==0,则不执行任何操作将数据插入页面上的元素实际上,我在
main.php
中有一行php用于自动搜索。我刚刚编辑了代码,并将完整的代码放在上面。但我有点明白你的意思。但是我仍然不知道reports.php将如何获得测试结果。php基本上运行测试,然后刷新流,直到流关闭。我有另一个脚本将结果输出到服务器上的文本文件。
reports.php
如何准确地知道输出流何时结束,何时有报告?你是说存储在mysql中并让reports.php查询它吗?当流关闭时,它将更改done=1。或者让创建文本文件的脚本将文件名存储在数据库中,并将done更改为1。然后report.php查询数据库,如果done=1,它将加载文件名存储在该数据库行中的文件,并将其输出到ajax调用。这将从insert.php的结果返回responseText?