提交没有页面刷新的表单

时间:2017-01-17 21:10:39

标签: javascript ajax html5 forms

我意识到Ajax是提交没有页面刷新的表单的公认方法,但这样做涉及在每个字段中循环并构造要提交的Post字符串。

是否没有其他方法可以使用浏览器内置功能提交表单,但拦截返回的html以停止刷新页面?

编辑: 与建议的副本不同,它询问表单验证:“我想运行javascript用户验证”

EDIT2: 主要问题是如何通过导航到新页面来停止服务器对提交的响应。是否存在服务器可以响应的内容会阻止整个页面刷新?

EDIT3: 如何返回http 204响应: 服务器已收到请求但没有要发回的信息,客户端应保留在同一文档视图中。这主要是为了允许脚本输入而不同时更改文档

1 个答案:

答案 0 :(得分:1)

是的..有想法是让表单操作和onsubmit事件处理

考虑以下代码:

<form name="myForm" action="demo_form.asp" onsubmit="return validateForm()" method="post">
Name: <input type="text" name="fname">
<input type="submit" value="Submit">
</form>

function validateForm() {
    var x = document.forms["myForm"]["fname"].value;
    if (x == "") {
        alert("Name must be filled out");
        return false;
    }

}

此时您正在拦截调用以确保表单有效。如果一切都过去了,那么页面刷新就会触发。如果您不希望刷新,您需要通过ajax处理帖子,您需要重建整个调用。希望这会帮助你...干杯

一种简单的方法,如果你使用jquery是使用的序列化数据 http://api.jquery.com/serialize/功能

这样做的一种方法是使用jQuery:

<form id="myForm" name="myForm" action="demo_form.asp" onsubmit="return validateForm()" method="post">


function validateForm() {
    var x = document.forms["myForm"]["fname"].value;
    if (x == "") {
        alert("Name must be filled out");
        return false;
    }

    var url = $('#myForm').attr('action');
    var data = $('#myForm').serialize();
    $.post(url, data);
}