停止从 DOM 刷新提交
Stop submit from refreshing from the DOM
假设我在页面上有这样的表单:
<form action="/add" method="post">
<input name="first">
<button type="submit">Submit</button>
</form>
问题是当我单击提交按钮时,页面会尝试http://localhost/add
加载为 URL。我想做的只是简单地从表单发出 HTTP post 请求,然后不重新加载页面,这甚至可以用 HTML 语义来做,还是我必须使用一些 javascript 以某种方式阻止默认操作然后发出请求?
我知道关于这个主题有很多问题,但他们似乎都是通过库或 javascript 发出请求的,而不是像我一样使用内置的表单方法?
您必须使用 AJAX 来实现此效果:
您需要做的第一件事是防止您正在谈论的行为:
$("button[type='submit']").click(function(e){
e.preventDefault();
e.stopPropagation();
});
好的,所以这个问题也使用了您可能指的是那个库...... 这就是所谓的jQuery——它会让你的生活更轻松,但如果你想避免它,那就给你的按钮一个id,然后这样做:
document.getElementById("submitButton").onclick = function(e) {
e.preventDefault();
e.stopPropagation();
}
然后,您必须进行 ajax 调用---这涉及收集要发送的表单数据...
data = {
first: document.getElementByName("first").value;
}
并使实际的 AJAX(又名 XHR)请求---
看起来像这样:
var request = new XMLHttpRequest();
request.open('POST', '/my/url', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
request.send(data);
在jQuery中,它更简单一些:
$.ajax({
type: 'POST',
url: '/my/url',
data: { first : $("input[name='first']").value() }
});
让服务器使用 HTTP 状态代码204 NO CONTENT
进行响应。这会阻止浏览器导航。
演示:http://jsfiddle.net/9r2e1n74/
(注意:这个小提琴不包含我自己的代码;它只是将问题中的表单指向返回204
响应的服务)
或者,在form
上设置target
属性,使其在某个隐藏帧中加载响应。
演示:http://jsfiddle.net/p571jy78/
<form action="/add" method="post" target="formtarget">
<input name="first">
<button type="submit">Submit</button>
</form>
<iframe name="formtarget" style="display:none;"></iframe>
或者,使用 JavaScript 处理带有 XMLHttpRequest
的表单提交。
相关文章:
- Jquery提交表单而不刷新
- 在jQuery中的IFrame中提交表单后刷新父窗口
- 浏览器在用PHP提交表单时不断刷新
- 如何在提交后关闭颜色框窗口,并刷新父页面上的图像
- 将以下代码重置并刷新提交后的表单
- 在ASP.NET中单击“提交”按钮时,使表单不刷新
- Jquery表单提交仍在刷新
- 提交后刷新整个页面(Fancybox)
- 提交后无法刷新页面
- 如何记住提交/刷新后使用的最后一个选项卡
- 使用javascript创建Form元素,并在不重定向/刷新的情况下提交
- 如何在不刷新 node.js 和 ejs 的情况下提交表单
- 在初始表单提交后使用ajax/jQuery自动刷新,然后更改页面标题
- 提交一个在同一页面上的表单,而不重新刷新页面
- 提交链接时不刷新,也不使用ajax
- 使用enter提交表单,而不触发页面刷新
- 在HTML上提交时阻止刷新
- 停止从 DOM 刷新提交
- 避免刷新提交表单的页面
- 复选框,刷新/提交后保持选中状态