使用Jquery设置计时器

时间:2015-09-02 15:08:20

标签: jquery timer

继承我的设置。我有一个按钮。

<input type="submit" value="Checkout" name="submitAction" class="btn btn-block alert-success unlock" />

击中此控制器。

 [HttpPost]
    public ActionResult CheckoutCase(int id)
  {
      Case currentCase = db.Cases.Find(id);
        currentCase.LockCase = true;
        currentCase.Lockout_TS = DateTime.Now;
        LogHistory userComments = new LogHistory("Case has been checked out", "User");
        currentCase.LogHistories.Add(userComments);
       db.SaveChanges();
        string url = this.Request.UrlReferrer.AbsolutePath;
        return Redirect(url);
    }

在点击该按钮的同时,我试图运行15分钟的jquery计时器,让用户知道他们的会话已经过期并点击另一个解锁案例的控制器。

  [HttpPost]
    public ActionResult UnlockCase(int id)
    {
        Case currentCase = db.Cases.Find(id);
        currentCase.LockCase = false;

        string url = this.Request.UrlReferrer.AbsolutePath;
        return Redirect(url);
    }

我已经尝试过很多与JQuery不同的东西,但我似乎找不到合适的方法来完成这项工作。

     $('.unlock').click(function(){
    setTimeout(function () {
            var id = @Model.ID
            $.ajax({
                type: 'POST',
                url: '/Case/UnlockCase',
                data: 'id=' + id,
                success: function () {
                    window.location.reload(true);
                }
            });
            //}, 15 * 1000 * 60);
        }, 10000);
    }

错误:

  

不推荐使用getPreventDefault()。使用defaultPrevented   代替。 browserLink:37:0在内容进程中使用nsIFile是   弃用。 filesystem.js:38:0 TypeError:this._recipeManager为null   LoginManagerParent.jsm:185:9不推荐使用getPreventDefault()。   请改用defaultPrevented。 browserLink:37:0处理程序功能丢了   异常:TypeError:info为null Stack:   _addBreakpoint @ resource://gre/modules/commonjs/toolkit/loader.js - &gt;资源:///modules/devtools/sourceeditor/debugger.js:138:5   addBreakpoint /&lt; @resource://gre/modules/commonjs/toolkit/loader.js - &gt;   资源:///modules/devtools/sourceeditor/debugger.js:154:37   makeInfallible /&lt; @resource://gre/modules/commonjs/toolkit/loader.js - &gt;   资源://gre/modules/devtools/DevToolsUtils.js:83:14行:138,   column:5 DevToolsUtils.js:59:0某些键盘事件不可用   键盘布局:键=&#34; e&#34;修饰符=&#34; accel alt&#34; debugger.xul键事件   某些键盘布局不可用:key =&#34; v&#34;修饰符=&#34; accel alt&#34;   debugger.xul键盘事件在某些键盘布局上不可用:key =&#34; f&#34;   修饰符=&#34; accel alt&#34; debugger.xul GTK2上没有关键事件:   键=#&34; U&#34;修饰符=&#34; shift,accel&#34; toolbox.xul

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

将按钮类型更改为“按钮”。 “提交”通常用于向后端提交表单。

<input type="button" value="Checkout" name="submitAction" class="btn btn-block alert-success unlock" />

答案 1 :(得分:0)

我认为您误解了setTimeout事件。事件将先等待直到计时器完成,然后启动以执行内部定义的功能。在你的情况下,这意味着,等待15分钟比jquery请求。见documentation

我认为你需要的东西会是这样的:

            // Set the time for error message, if request woudn't end
            var yourTimeout = setTimeout(function() { timeOutError() }, 10000);
            var id = @Model.ID
            $.ajax({
                type: 'POST',
                url: '/Case/UnlockCase',
                data: 'id=' + id,
                success: function () {
                    window.location.reload(true);
                    //clear timeout on success
                    clearTimeout(yourTimeout);
                },
                error() {
                    //handle erre 
                    //clear timeout on error
                    clearTimeout(yourTimeout);
                }
            });

            function timeOutError() {
                // your timeout error 
            }

更新(根据您的评论)

         $('.unlock').click(function(){
            var id = @Model.ID
            // Set the time for error message, if request woudn't end
            var yourTimeout = setTimeout(function() { timeOutAction(id) }, 10000);
            // ajax request to CheckOutCase
            $.ajax({
                type: 'POST',
                url: '/Case/CheckoutCase',
                data: 'id=' + id,
                success: function (result) {
                    window.location.reload(true);
                    //clear timeout on success
                    clearTimeout(yourTimeout);
                },
                error: function(requestObject, error, errorThrown) {
                    //handle erre 
                    //clear timeout on error
                    clearTimeout(yourTimeout);
                }
            });

         });

         // invoked because of timeout
         function timeOutAction(id) {
             // ajax request to UnlockCase
             $.ajax({
                type: 'POST',
                url: '/Case/UnlockCase',
                data: 'id=' + id,
                success: function (result) {

                },
                error: function(requestObject, error, errorThrown) {

                }
             });
         }