在视图中调用脚本时设置超时?或在脚本中设置有效超时?

Posted

技术标签:

【中文标题】在视图中调用脚本时设置超时?或在脚本中设置有效超时?【英文标题】:set timeout on calling a script on view? or setting an effective timeout inside script? 【发布时间】:2018-07-26 21:32:41 【问题描述】:

通过一些努力,我部分实现了我想要的,但如果可以做得更好,我还在寻找其他选择。下面是场景:

当密码重置成功时,有一个控制器会显示一个视图,并且在该视图上我正在调用一个重定向到登录页面的脚本(它实际上会访问身份服务器并使用有效令牌返回登录页面)。

我发现很难在视图上显示成功消息,因为重定向发生得如此之快,以至于用户将无法显示消息(我尝试了其他可能的方式来显示消息设置 ViewBag、TemData 等,但没有任何效果并且这可能是我可以打赌的最好方法)。

尝试在脚本内的函数上设置 setTimeout,但它似乎工作部分(这就是我的想法,可能它不起作用,我看到的延迟可能是因为调用的 url 需要时间回应,不确定!)。

所以我需要一些关于如何实现延迟或超时的建议:

查看代码:

@if (ViewBag.Success != null)

<div>
    <p class="alert-success">@ViewBag.Success</p>
</div>


@section scripts

   @if (Model.AutomaticRedirectToSignIn)
          
      // this is the script called 

      <script src="~/js/signout-redirect.js"></script>
   

脚本代码:

window.addEventListener("load", function ()

  var a = document.querySelector("a.PostLogoutRedirectUri");
  if (a) 
     window.location = a.href;
  
);

我在下面尝试过:

方法一:

window.addEventListener("load", setTimeout(function () 
var a = document.querySelector("a.PostLogoutRedirectUri");
if (a) 
    window.location = a.href;

), 5000);

方法二:

setTimeout(window.addEventListener("load", function () 
var a = document.querySelector("a.PostLogoutRedirectUri");
if (a) 
    window.location = a.href;

), 5000);

方法 2,似乎给我带来了一些延迟(这是我可以观察到的,但不确定)。我无法完全更改脚本,因为我不确定它可能会影响其他地方。我只是想使用现有的重定向代码供我使用。

任何人都可以建议一个更好的方法来延迟到位,有没有办法在延迟后在我的视图上调用脚本?你的建议会有很大帮助。谢谢。

【问题讨论】:

我不得不改变我的方法。我无法解决这个问题。我只是离开了显示成功消息的视图页面,并要求用户单击该消息下方的链接返回登录页面.. 【参考方案1】:

我不得不改变我的方法..我无法解决这个问题..我只是离开显示成功消息的视图页面,并要求用户单击该消息下方的链接以返回登录页面..

【讨论】:

以上是关于在视图中调用脚本时设置超时?或在脚本中设置有效超时?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ruby 的 RestClient gem 中设置超时?

python3 socket 中设置超时的几种常用方法

Java设置session超时(失效)的三种方式 设置session的有效时间

bash - 错误或超时关闭脚本[重复]

在 SQL Server 中设置最大连接超时的最佳方法

如何在改造库中设置超时?