博客列表 >button类型对ajax post 表单的影响

button类型对ajax post 表单的影响

hanyufeng的博客
hanyufeng的博客原创
2017年12月19日 15:14:43981浏览

说明:

页面中有一个form,一个button按钮,尝试以ajax方式无刷提交表单。

页面代码为:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>xhr对象</title>
</head>
<body>
<!--用之前的登陆表单讲解-->
<h3>用户登陆</h3>
<form action="check.php" method="post">
    <p>用户名: <input type="text" name="userName" placeholder="不少于8位"></p>
    <p>密&nbsp;&nbsp;码: <input type="password" name="password" placeholder="不少于6位"></p>
    <button type="button">提交</button>
</form>
</body>
</html>

ajax代码为:

<script>
    //要点:将表单的提交行为交给一个js脚本来处理,这时该脚本充当了客户端的角色,因为这个脚本也可以送一个请求
    //获取提交按钮
    var submit = document.getElementsByTagName('button')[0]

    //给该提交按钮添加点击事件
    submit.onclick = function () {
        //1.创建ajax对象
        var xhr = new XMLHttpRequest()
        //2.用onreadystatechange事件检测客户端准备状态
        xhr.onreadystatechange = function () {
            //如果客户端请求状态等于4,并且服务器端http响应状态为200,则表示请求成功
            if (xhr.readyState == 4 && xhr.status == 200) {
                //执行DOM操作
                alert('返回')
            }
        }

        //3. 调用 open()方法来初始化一个客户端的ajax请求
        xhr.open('post', 'check.php', true)

        //4. 设置头信息,将内容类型设置为表单提交方式
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')

        //5. 以表单数据为参数,将请求发送到服务器端处理
        var data = serialize(document.forms[0])
//        var data = "userName=admin&password=111";
        xhr.send(data)
    }
</script>

PHP文件代码为:

<?php
//测试是否获取到了数据
print_r($_POST);

测试一:button类型为button

<button type="button">提交</button>

代码报错:serialize is not definedserialize 不是js原生函数,执行到此处报错

1.png

serialize 的问题另说,报错说明,ajax部分的代码是被执行了。

另外,日志中没有XMLHttpRequest,说明ajax并没有成功提交。

整个页面也没有刷新。

测试二:button类型改为submit(不写类型默认为submit)

<button>提交</button>

页面跳到了check.php文件,显示出了表单内容:

2.png

分析:仍然报错,另外也没有XMLHttpRequest日志,说明ajax并没有成功提交

但是,跳转到了php页面,也显示出了表单数据。

既然ajax没有成功提交表单,那就是由button提交了表单。


小结:

页面中有form时,如果要用button 的onclick事件,Ajax无刷新提交表单,应当设置button的类型为"button",

即:

<button type="button">提交</button>

或者,使用其它元素绑定合适的事件来提交。

serialize 序列化表单的问题是另外的情况,这里不做讨论。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议