Javascript Ajax调用以等待侦听器脚本完成并通知用户
我有一个程序,可以让用户从一个网页(main.php)提交一个测试用例,该网页将发送一个ajax请求,在MySQL中插入一行用户数据(insert.php),并且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调用将在行插入完成后立即完成,并将告诉用户等待 我希望能够让用户知道监听器脚本何时完成测试用例,并将结果显
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?