【问题标题】:Newbie 'Can you do this with Dojo/Ajax' Question新手“你能用 Dojo/Ajax 做到这一点吗”问题
【发布时间】:2011-02-11 19:33:51
【问题描述】:

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

【问题讨论】:

  • 是的,你可以! (请提出具体的问题。您的具体问题是什么?您在哪里坚持?)

标签: java javascript ajax weblogic


【解决方案1】:

在初始请求之后,使用内置 JavaScript 函数“setTimeout("countdown()", 4000)”调用 JavaScript 用户定义函数“countdown()”,其中数字“4000”类似于需要的微秒数被传递以触发第一个参数中提到的函数。

在“countdown()”函数中,编写 AJAX 调用的逻辑,您将在其中更新数据库,以确保已经过了所需的 4 秒时间(例如),现在用户可以发送第二个请求。

同样在同一个 AJAX 调用中,您可以打印出一些单词(例如让单词为“yes”),您可以在“countdown()”函数定义中捕获/获取它,使用“ responseText" JavaScript 的 "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 轻松实现这些类型的逻辑。

希望对你有帮助。

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2010-11-20
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多