我有一个网页,其中包含一个向网络服务发送初始请求的功能。 在一些预定时间之后,用户可以发送第二个请求。 在用户发送第一个请求之后,我希望在用户发送第二个请求时网页倒计时。 在倒计时之后,我想要自动更新数据库字段,表明已经过了适当的时间。 当时间过去并且数据库更新时,我希望网页更新以显示一个允许用户发送第二个请求的按钮。
答案 0 :(得分:2)
在初始请求之后,使用内置JavaScript函数“countdown()
”调用JavaScript用户定义函数“setTimeout("countdown()", 4000)
”,其中数字“4000
”类似于数字需要传递的微秒才能触发第一个参数中提到的函数。
在“countdown()
”函数中,编写AJAX调用的逻辑,您将在其中更新所需的4秒(例如)时间的数据库。现在用户可以发送第二个请求。
同样在同一个AJAX调用中,您可以打印出一些单词(例如,让单词为“yes
”),您可以在“countdown()
”函数定义中捕获/获取它,使用JavaScript的“responseText
”的“XMLHttpRequestObject
”关键字,在虚拟变量“flag
”中。
现在,您可以在“countdown()
”函数定义中编写如下内容: -
function countdown() {
document.getElementById("btn_second_req").style.display = 'none';
var flag = '';
// all code to prepare for AJAX call
// AJAX called, return also fetched in a variable "flag".
if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) {
flag = XMLHttpRequestObject.responseText;
}
if (flag == 'yes') {
document.getElementById("btn_second_req").style.display = 'block';
}
}
因此,默认情况下,第二次触发HTML按钮的请求从第一次开始隐藏,&仅在满足“flag
”变量条件时激活。
此外,由于任何用户的第一次呼叫的详细信息都保存在数据库中,因此在第二次呼叫中,您需要检查服务器验证是否存在第一次呼叫的详细信息,否则第二次请求呼叫将不会受理。
这些类型的逻辑可以使用任何JavaScript框架库(如jQuery或Prototype)或仅使用纯JavaScript实现。
希望它有所帮助。
答案 1 :(得分:1)
是的,可以做到。我就是这样做的,几乎和你描述的一样。
1-网页将请求发送给服务。该服务计算直到下一个请求可以执行的时间,将其存储在db字段/会话中(取决于您的服务工作方式),并将其发送回客户端,以及您的服务发回的任何内容。
2-您使用javascript的setTimeout函数创建一个计时器(如果使用javascript库,则使用等效函数)http://www.w3schools.com/js/js_timing.asp。
3-当计时器执行时,您向Web服务发送请求,询问是否可以启动第二个请求。服务器检查db字段中的时间。如果超过“下一个请求时间”,则服务器响应为正,否则返回剩余时间,然后客户端创建新计时器。
4-您发送新请求。服务器再次检查它的“下一个请求时间”(如果有人聪明地破解了javascript,或者它们是客户端上的错误)。如果是时间,它会执行第二个请求。
唯一的区别是,按照我描述的方式,服务器上的所有内容都是作为客户端操作的结果执行的,因此您不必乱用线程/ cron作业来自动更新数据库字段。
祝你好运!