html为啥总是要刷新才能同步修改

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了html为啥总是要刷新才能同步修改相关的知识,希望对你有一定的参考价值。

参考技术A 首先,可以明确的是,网页局部刷新是不难实现的,实际上很多网站也是支持的,比如站内信、实时大盘数据之类的应用。

但是为什么很多网站不支持呢?主要原因有几个方面:首先要做好还是需要一些基础设施和技术支持的,另外也需要一些额外的服务器资源。所以一些网站,尤其是传统的网站大多不支持,比如一些新闻站点、公告/公示、内容发布网站等等。

技术实现方案有很多种:

最简单的就是每个一段时间(比如3秒)请求接口更新数据并重新渲染,这么做对服务器压力较大。

其次是通过长连接,就是网页发起一个HTTP请求,服务器端一直不响应,等到有数据更新的时候再吧新数据返回,网页拿到数据后重新渲染,然后再次发起一个HTTP请求,不断这么循环,网页就可以实时拿到最新数据。

更好的方案是通过websocket建立长连接,这样web端和服务器端就可以实时的双向通讯,及时拿到最新数据,看起来与HTTP长连接区别不大,但是因为实现机制不一样,websocket会有更低的资源消耗。

网站不支持并不意味着用户不需要,比如公告/公示网站,商品信息,动态的用户行为、销售等数据,对很多人就非常重要,需要实时关注。这个时候可以通过一些辅助工具完成信息的监控和管理,比如:网页更新提醒浏览器插件

为啥要添加“return false;”提交事件阻止页面刷新?

【中文标题】为啥要添加“return false;”提交事件阻止页面刷新?【英文标题】:Why does adding "return false;" to a submit event prevent the page from refreshing?为什么要添加“return false;”提交事件阻止页面刷新? 【发布时间】:2015-11-15 06:25:28 【问题描述】:

我正在做一个关于使用 Node.js 和 socket.io 制作聊天服务器的教程。这是我在 html 中的内容:

<form id='chat_form'>
  <input id='chat_input' />
  <button>Send</button>
</form>
<script type='text/javascript'>
var socket = io();
$('#chat_form').submit(function()
  var message = $('#chat_input').val();
  socket.emit('messages', message);
  $('#chat_input').val('');
);
</script>

我不会费心把我拥有的东西放在后端,因为那部分工作正常。但是在浏览器中,每次提交,页面都会刷新,并且在网址栏末尾添加了一个/?

环顾四周,发现另一个教程(socket.io 网站上的那个),代码基本相同,但他们在提交事件的末尾添加了return false;。试过了,效果很好。我想了解为什么会这样。谁能解释一下?另外,您能解释一下为什么将/? 添加到URL 中吗?

【问题讨论】:

返回假;阻止表单的操作,因此它停止提交表单,因为这是表单的操作(它是 this in jquery 的纯 js 版本)。您通常应该在带有 ajax 调用的表单提交上使用它(以阻止页面刷新)。如果您的表单上没有方法,它看起来好像在提交时使用了 get 方法,这就是为什么要添加 ?到 url 并刷新页面 - see this post LOL 我想知道为什么这个问题得到 4 票。这不属于 node.js 标签。我觉得唯一的原因是这个问题很容易回答:P 【参考方案1】:

先说说/?

表单提交的默认方法是GET,但是你可以用&lt;form method="POST"&gt;更改它(如果没有提供方法,默认是&lt;form method="GET"&gt;)。

使用POST 表单数据在请求body 中传递,使用GET - 在请求url params 中。

如果你有

<form action="/submit.php" method="GET">
   <input name="foo" value="1" />
   <input name="bar" value="2" />
</form>

然后您提交该表单,您将获得类似 /submit.php?foo=1&amp;bar=2 的 URL。

在您的情况下,您没有带有 name 属性的输入,因此您的 GET 参数是“空的”(/?&lt;params should go there&gt;)。

您可以阅读更多内容: http://www.w3schools.com/tags/att_form_method.asp

关于return false;

提交表单会强制页面重新加载(使用POSTGET 请求)。如果您使用javascript 提交表单,则需要阻止此默认操作。你可以这样做

$('#chat_form').submit(function(event)
    //....
    event.preventDefault();
);

或者return false;

【讨论】:

【参考方案2】:

一个简单易懂的答案是

“返回 false 阻止导航”

return false 总是在用户或浏览器操作需要被弯腰的情况下使用。

在每一种编程语言中,return 后的代码都不会被执行,这意味着不会发生进一步的动作,可以是

停止表单提交

停止导航和超链接跳转

除了return false你也可以使用

   event.preventDefault();

   event.stopPropagation();

现在关于表单提交

使用GETPOST 提交表单,这可以由作者使用form tag 中的method="POST" 属性决定,

当使用 GET 提交默认表单时没有给出任何内容时

在 url 中传递值 - ex - something.html?para1=value1&para2=value2

速度快但安全性较低,每次提交表单时,所有表单元素都会在 url 中传递

【讨论】:

【参考方案3】:

来自jQuery submit() 文档:

现在,当提交表单时,会发出警告消息。这发生在实际提交之前,因此我们可以通过在事件对象上调用 .preventDefault() 或从我们的处理程序中返回 false 来取消提交操作。

因此,正在阻止submit 事件发生时触发的默认事件行为。

jQuery 提交函数的默认提交方法是 HTML GET,它以 URL 查询的形式提供表单参数,格式为 /?queryParam=value。因此,/? 出现在 URL 中,在 /? 之后没有查询参数(因为表单中没有提供任何参数)。

希望这会有所帮助!

【讨论】:

【参考方案4】:

您的表单元素没有方法,因此设置了默认方法 get。如果点击发送,所有输入元素都添加在current page+之后?

return false 阻止执行提交操作。

【讨论】:

【参考方案5】:

返回 false 会阻止触发 html 元素事件的所有默认函数。

一个例子是一个 html 表单,一旦你点击提交按钮,它默认是导航到另一个页面。如果您使用 Ajax 函数在不离开页面的情况下将数据发送到服务器,您不希望发生这种情况。

另一种方法是将事件对象参数传递给事件函数。 然后在函数的开头键入event.preventDefault();。

以下链接很好地解释了为什么出现尾部斜杠。 https://webmasters.stackexchange.com/questions/35643/is-trailing-slash-automagically-added-on-click-of-home-page-url-in-browser

【讨论】:

以上是关于html为啥总是要刷新才能同步修改的主要内容,如果未能解决你的问题,请参考以下文章

[android数据库同步]架构一种Android界面数据同步刷新机制

为啥总是在 asp.net mvc 中同步异步操作(async await)

为啥手机有道云总是显示未同步

我手机上的有道云笔记记得笔记为啥每次同步都不行?手机上总是显示未同步笔记?

问一个source insight的问题 为啥SI总是不停提示要求重新同步

gradle自动刷新