开发者

Newbie 'Can you do this with Dojo/Ajax' Question

开发者 https://www.devze.com 2023-02-10 13:43 出处:网络
I have a web page that has a function that will send an initial request to a web service. A开发者_Go百科fter some predefined time, the user can send a second request.

I have a web page that has a function that will send an initial request to a web service. A开发者_Go百科fter some predefined time, the user can send a second request. After the user sends the first request, I want the web page to countdown when the user may send the second request. After the countdown, I want a DB field to be updated automatically, indicating that the appropriate time has passed. When the time has passed and the DB updated, I'd like the webpage updated to show a button that would allow the user to send the second request.


After the initial request, call a JavaScript user-defined function "countdown()" using the in-built JavaScript function "setTimeout("countdown()", 4000)", where the number "4000" resembles the number of micro-seconds that need to be passed to fire the function mentioned in the first parameter.

In the "countdown()" function, write the logic for the AJAX call, where you will be updating the database that the desired time of 4 seconds (for example) has passed & now the user can send the second request.

Also in the same AJAX call, you can print out some word (let the word be "yes" for example), which you can catch / fetch it in the "countdown()" function definition, using the "responseText" keyword of JavaScript's "XMLHttpRequestObject", in a dummy variable "flag".

Now you can write something like the following in the "countdown()" function definition:-

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';
    }
}

So by default, the second request firing HTML button is hidden from the very first time, & only activated when the "flag" variable condition is satisfied.

Also since the details of the first call of any user is being kept in the DB, so in the second call, you need to check with server validation that there exists details for the first call, otherwise the second request call will not be entertained.

These type of logic can easily be implemented using any JavaScript framework library (like jQuery or Prototype) or by plain JavaScript only.

Hope it helps.


Yes, it can be done. Here is how I would do it, which is almost as you describe it.

1- The web page sent the request to the service. The service compute the time until the next request can be executed, store it in a db field/in session (depending how your service work), and send it back to the client, plus whatever it is your service send back.

2- You create a timer with the setTimeout function of javascript (or an equivalent if you use a javascript library) http://www.w3schools.com/js/js_timing.asp .

3- When the timer execute, you send a request to the webservice to ask if its ok to start the second request. The server check the time in the db field. If it is past "next request time", the server respond positive, else it return the remaining time, and the client then create a new timer.

4- You send your new request. The server check again if its "next request time" (in case someone smart hack the javascript, or if their is a bug on the client). If it is time, it execute the second request.

The only difference is that with the way I described, everything on the server execute as the result of a client action, so you don't have to mess with thread/cron job to auto update your db field.

Good luck!

0

精彩评论

暂无评论...
验证码 换一张
取 消