JS - 通过javascript提交不会传递post变量

JS - submitting through javascript does not pass post variables

本文关键字:post 变量 通过 javascript 提交 JS      更新时间:2023-09-26

我正在使用纯JS首先阻止表单提交,然后我有一些验证代码,最后自动提交,但数据没有从客户端传递到服务器脚本。

这是 HTML:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Chat Room</title>
    <link type="text/css" href="main.css" rel="stylesheet" />
    <script type="text/javascript" src="main.js"></script>
</head>
<body>
    <div id="container" class="add-nick">
        <h3>Enter Your Name</h3>
        <form action="chat.php" method="post" id="add-nicki">
            <input type="text" placeholder="At least 6 alphabets e.g. Jackson" class="text" name="name" />
            <input type="submit" value="Submit" class="submit" name="btnsubmit" />
        </form>
    </div>
</body>
</html>

JS:

window.onload = function() {
    document.forms[0].onsubmit = function(e) {
        e.preventDefault();
        var regexp = new RegExp("^[A-Za-z]+$"),
        elem = this.elements[0],
        value = elem.value;
        if(regexp.test(value) && typeof value != "null" && value.length > 5) {
            elem.className = "text correct";
            var formElem = this;
            setTimeout(function() { formElem.submit(); }, 0);
        }
        else elem.className = "text wrong";
    };
};

PHP 文件:

<?php
session_start();
if(isset($_POST['btnsubmit'])) {
    $_SESSION['name'] = $_POST['name'];
    echo $_SESSION['name'];
}
else {
    if(!isset($_SESSION['name']))
        echo "Header";
    else
        echo $_SESSION['name'];
}

?>

是否有问题或JS submit功能无法正常运行?

仅当通过单击提交按钮提交表单时,才会传递与提交按钮对应的请求参数。这里的情况并非如此,因为您禁止原始表单提交(由按钮触发的表单),然后从 JavaScript 调用formElem.submit();没有按钮单击意味着没有请求参数,因此 PHP 脚本中的isset($_POST['btnsubmit'])永远不会返回 true。

一种解决方案可能是在提交表单之前将 btnsubmit 参数添加到表单的操作中:

formElem.action += (formElem.action.indexOf('?') == -1 ? '?btnsubmit=Submit' : '&btnsubmit=Submit');