2011-02-11 7 views
2

Webサービスに最初のリクエストを送信する機能を持つWebページがあります。 事前定義された時間が経過すると、ユーザーは2番目の要求を送信できます。 ユーザーが最初のリクエストを送信した後、ユーザーが2回目のリクエストを送信すると、Webページがカウントダウンするようにします。 カウントダウン後、DBフィールドを自動的に更新して、適切な時間が経過したことを示します。 時間が経過してDBが更新されたら、ユーザーに2回目のリクエストを送信できるボタンを表示するようにWebページを更新したいと思います。初心者 'Dojo/Ajaxでこれを行うことができますか'質問

+1

はい、できます。 (特定の質問をしてください。あなたの正確な問題は何ですか?どこにくっついたのですか?) –

答えて

2

は、番号「4000は」火に渡す必要マイクロ秒数に似たビルトインJavaScript関数「setTimeout("countdown()", 4000)」を使用して、「countdown()」JavaScriptのユーザー定義関数を呼び出します最初のパラメータで述べた関数

"countdown()"関数では、AJAX呼び出しのロジックを記述します。ここでは、ユーザーが2番目の要求を送信できるように、たとえば4秒の希望時間が&を通過したデータベースを更新します。

また同じAJAX呼び出しで、あなたは「responseText」キーワードを使用して、「countdown()」関数定義でそれをフェッチ/あなたがキャッチすることができ、いくつかの単語(例えば単語「yes」であるとする)を、プリントアウトすることができます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'; 
    } 
} 

ので、デフォルトでは、第2の要求発射HTMLボタンが非常に最初の時から隠されている、&場合にのみ有効「flag」という可変条件が成立する。

また、すべてのユーザの最初のコールの詳細がDBに保存されているので、2番目のコールでは、サーバ検証で最初のコールの詳細が存在することを確認する必要があります。楽しまないでください。

これらのタイプのロジックは、任意のJavaScriptフレームワークライブラリ(jQueryまたはPrototypeなど)を使用するか、プレーンJavaScriptのみを使用して簡単に実装できます。

希望します。

1

はい、できます。ここで私はそれを行う方法です、あなたがそれを記述するのとほぼ同じです。

1-ウェブページがリクエストをサービスに送信しました。サービスは、次のリクエストが実行されるまでの時間を計算し、DBフィールド/セッション(サービスの仕組みによって異なります)に保存し、クライアントに返信します。

2タイマーは、javascriptのsetTimeout関数(またはJavaScriptライブラリを使用する場合は同等)http://www.w3schools.com/js/js_timing.aspで作成します。

3-タイマーが実行されると、Webサービスに要求を送信し、2番目の要求を開始するかどうかを尋ねます。サーバーは、dbフィールドで時刻を確認します。 「次の要求時間」を過ぎている場合、サーバーは肯定応答を返し、それ以外の時間を返すと、クライアントは新しいタイマーを作成します。

4-新しいリクエストを送信します。サーバは、「次のリクエスト時間」(誰かがスマートにハックしたり、クライアントのバグである場合に備えて)を再度チェックします。時間であれば、2番目の要求を実行します。

唯一の違いは、私が記述した方法では、サーバー上のすべてがクライアントアクションの結果として実行されるため、dbフィールドを自動更新するスレッド/ cronジョブを混乱させる必要はないということです。

幸運を祈る!最初の要求の後

関連する問題