javascript - HTML 表单方法与 jQuery 函数类型

标签 javascript html jquery ajax forms

我完全是前端开发的新手,只是在学习 jQuery。

我对“使用 jQuery ajax 提交 HTML 表单”感到困惑。这是一个简单的例子:

<form class="form" action="" method="post">
    <input type="text" name="name" id="name" >
    <textarea name="text" id="message" placeholder="Write something to us"> </textarea>
    <input type="button" onclick="return formSubmit();" value="Send">
</form>

<script>
    function formSubmit(){
        var name = document.getElementById("name").value;
        var message = document.getElementById("message").value;
        var dataString = 'name='+ name + '&message=' + message;
        jQuery.ajax({
            url: "submit.php",
            data: dataString,
            type: "PUT",
            success: function(data){
                $("#myForm").html(data);
            },
            error: function (){}
        });
    return true;
    }
</script>

如你所见,当我们点击按钮 Send , 函数 formSubmit()将被调用,jQuery.ajax 将完成它的工作。它将发送类型为 PUT 的 http 请求。 .

但是HTML表单中有一个属性method="post" ,现在我很困惑。当我们点击按钮时,实际上会发生什么? jQuery.ajax 将在 js 函数中发送请求,但是 method="post" 会怎样?做?或者 method="post"可以忽略吗?如果它什么都不做,我们可以使属性method吗?空:<form class="form" action="" method="">

额外的

现在我意识到这个例子中按钮的类型是button , 而不是 submit .如果我将类型更改为 submit然后点击它,会发生什么?它会发送两个 http 请求,一个 post 请求来自表单,一个 put 请求来自 jQuery.ajax 吗?

最佳答案

这个例子设计得很糟糕而且令人困惑。

formSubmit函数只会在按钮被点击时被调用。单击按钮时,该函数将运行,并且没有其他会发生;由于输入不是提交按钮,因此表单不会尝试提交。所有网络事件都将来自 jQuery.ajax在函数里面。在这种情况下,<form>method="post"被完全忽略,因为表单没有被提交 - 使用的方法将是 .ajax 中的方法函数,即 PUT。

但是如果用户在聚焦在 <input type="text" 中时按回车键,表单仍然是可提交的.如果他们这样做,那么 formSubmit函数将不会被调用(因为按钮没有被点击),用户的浏览器将发送 namemessage作为服务器的表单数据,在当前页面上 - 是的,作为 POST。 (此代码的当前页面是否在 submit.php 上?如果不是,那可能是一个错误。也许编写代码的人完全忽略了不使用按钮即可提交表单的可能性。)

为了使示例不那么困惑,我将按钮更改为提交 按钮,并向表单添加提交处理程序而不是向按钮添加点击监听器。然后有提交处理程序 return false或调用e.preventDefault以便所有网络事件都通过 .ajax打电话。

关于javascript - HTML 表单方法与 jQuery 函数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65444603/

相关文章:

jquery - 在 jQuery 函数中使用 "this"

javascript - 在网页上的文本框中键入内容时删除所有空格第二部分

javascript - 如何将测试用例组织成大型应用程序的测试套件

javascript - swiper - 如何禁用嵌套的水平滑动器进一步滚动(边缘触摸释放)?

javascript - 无法从计数中减去

javascript - Apache Cordova 无法加载插件

javascript - 单击时如丝般顺滑的滚动?

javascript - KnockoutJS if 语句有效性

html - 无法使用 Internet Explorer 拉伸(stretch)图像和覆盖纵横比

html - 这在 css 字体 : 20vmin/1 FontNameBold;? 中意味着什么