使用location.reload()时为什么我的页面没有刷新?

时间:2018-03-07 20:19:32

标签: javascript html freemarker page-refresh

我知道这里有过多次询问,但我想要一些意见。

我正在处理的网络应用程序通过Freemarker显示数据库中的表格。它包括一个提交按钮,用于删除该数据库中的条目。该按钮适用于发送请求,但我想让它自动刷新页面,以显示没有该条目的新表。我试过这个:

<form onsubmit="location.reload()" method="post" action="http://localhost:8080/person/delete/${profile.id};">
<input type="submit" value="Delete"></form>

和此:

<form onsubmit="location.reload()" method="post" action="http://localhost:8080/person/delete/${profile.id};">
<input type="submit" value="Delete"></form>

两者都没有任何影响。进一步的研究表明,除非forceGet设置为true,否则reload()将从缓存中刷新页面。我为这两种方法做了这个,并没有看到任何区别。然后我认为这是一个页面刷新的情况,然后才能从服务器获取更新的信息,所以我等了100毫秒:

<script>
    function reloadPage() {
        setTimeout(function () {
            location.reload();
        }, 100)
    }
</script>
<form onsubmit="reloadPage()" method="post" action="http://localhost:8080/person/delete/${profile.id};">
                        <input type="submit" value="Delete"></form>

这有效,但我想知道是否有任何关于原始方法不起作用的见解。另外,对我的代码的替代品有任何建议吗?

编辑:

澄清路径http://localhost:8080/person/delete/ $ {profile.id};不会导致页面;它意味着调用将运行delete方法的资源类中的方法中的方法:

@POST
@Path("/delete/{id}")
public void deleteProfile(@PathParam("id") int id) {
    manager.deleteProfile(id);
}

2 个答案:

答案 0 :(得分:1)

我不确定为什么你的代码有效,它不应该。提交表单时,它实际上会将您重定向到action中指定的URL,因此无法同时重新加载和重定向。

我的建议是使用http请求删除数据。这看起来像这样:

<script>
    function deleteData(var id) {
        var xmlHttp = new XMLHttpRequest();
        xmlHttp.onreadystatechange = function() { 
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
                location.reload(); // request successfull, so reload
        }
        xmlHttp.open( "GET", "http://localhost:8080/person/delete/"+id, true );
        xmlHttp.send( null );
    }
</script>
<button onclick="deleteData(${profile.id})">Delete</button>

或者,您可以使用表单(不使用reloadPage())并将http://localhost:8080/person/delete/xy处的页面重定向回此站点。

答案 1 :(得分:1)

因为在运行操作之前调用onsubmit。流程就是这个:

  • 提交表格
  • 调用提交事件
  • 如果未阻止事件,则执行操作

所以发生了什么:

  • 提交表格
  • 重新加载页面

由于您正在重新加载页面,因此永远不会达到操作,因此会停止所有页面逻辑。就像关闭程序并再次打开它一样。

你的100毫秒是一个肮脏的解决方法,因为它适用于你,它可能不适用于那些在100毫秒之前无法处理动作的人。想象一下,设备速度慢,网络速度慢或速度慢,会导致动作延迟超过100毫秒。它将在操作运行之前重新加载页面。

我不明白为什么你不让网页为你重新加载。自然形式提交将您带到操作URL,加载它,因此如果是相同的URL,则重新加载页面。