Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用onload事件避免无限循环_Javascript_Jsp_Loops_Onload_Infinite - Fatal编程技术网

Javascript 使用onload事件避免无限循环

Javascript 使用onload事件避免无限循环,javascript,jsp,loops,onload,infinite,Javascript,Jsp,Loops,Onload,Infinite,我对javascript相当陌生,我遇到了一个问题: 我有一个通过jsp页面中的按钮调用操作的方法 问题是,我希望在加载jsp页面后立即执行此操作,而不必使用button事件 我试图在JSP主体中使用onload()事件。这确实会在加载后执行我的操作,但是,它会停留在一个无限循环中,因为它会一次又一次地加载页面 <script language="JavaScript" type="text/javascript"> function send() {

我对javascript相当陌生,我遇到了一个问题: 我有一个通过jsp页面中的按钮调用操作的方法

问题是,我希望在加载jsp页面后立即执行此操作,而不必使用button事件

我试图在JSP主体中使用onload()事件。这确实会在加载后执行我的操作,但是,它会停留在一个无限循环中,因为它会一次又一次地加载页面

<script language="JavaScript" type="text/javascript">
    function send()
    {
        document.forms['thisForm'].submit(); 
    }
</script    
....
<body onload="send()">

<html:form action="/something/foo.do?method=methodFoo" method="post">

函数send()
{
document.forms['thisForm'].submit();
}

您可以尝试在不提交表单的情况下执行操作。

解决此问题的方法有很多,但我将从我最喜欢的方法开始:

BODY onLoad="window.location.href='EXAMPLE.html';" onUnload="send();"
这里发生的事情是,它做的第一件事是将您传递到一个新的网页(“EXAMPLE.html”),但它必须在退出时运行您的JavaScript。通过这样做,它无法进入无限循环

另一种方法:

BODY onLoad="send();window.close();"

使用此命令,它将在运行命令后尝试关闭窗口。我不太喜欢这个,因为window.close命令的行为可能会因使用的浏览器而异,而且几乎总是需要个人同意才能关闭它。但是,它可能适合您。

重构代码,使其不在每次加载页面时都提交表单编辑听起来像“submit()”,必须使正文再次加载。否则怎么会有无限循环?@mareoraft必须引起,当您提交表单时,浏览器会发送请求。除非
返回false,否则请求将刷新浏览器。浏览器刷新并看到:
send()
,然后再次出现……我无法在我正在处理的项目的当前环境中使用AJAX:/这是我看到的唯一方式。您可以尝试重构代码以导航到另一个不再具有“submit()”的页面。