新手'你能用Dojo / Ajax'问题吗?

时间:2011-02-11 19:33:52

标签: java javascript ajax weblogic

我有一个网页,其中包含一个向网络服务发送初始请求的功能。 在一些预定时间之后,用户可以发送第二个请求。 在用户发送第一个请求之后,我希望在用户发送第二个请求时网页倒计时。 在倒计时之后,我想要自动更新数据库字段,表明已经过了适当的时间。 当时间过去并且数据库更新时,我希望网页更新以显示一个允许用户发送第二个请求的按钮。

2 个答案:

答案 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框架库(如jQueryPrototype)或仅使用纯JavaScript实现。

希望它有所帮助。

答案 1 :(得分:1)

是的,可以做到。我就是这样做的,几乎和你描述的一样。

1-网页将请求发送给服务。该服务计算直到下一个请求可以执行的时间,将其存储在db字段/会话中(取决于您的服务工作方式),并将其发送回客户端,以及您的服务发回的任何内容。

2-您使用javascript的setTimeout函数创建一个计时器(如果使用javascript库,则使用等效函数)http://www.w3schools.com/js/js_timing.asp

3-当计时器执行时,您向Web服务发送请求,询问是否可以启动第二个请求。服务器检查db字段中的时间。如果超过“下一个请求时间”,则服务器响应为正,否则返回剩余时间,然后客户端创建新计时器。

4-您发送新请求。服务器再次检查它的“下一个请求时间”(如果有人聪明地破解了javascript,或者它们是客户端上的错误)。如果是时间,它会执行第二个请求。

唯一的区别是,按照我描述的方式,服务器上的所有内容都是作为客户端操作的结果执行的,因此您不必乱用线程/ cron作业来自动更新数据库字段。

祝你好运!