表单值不会发送回服务器



正如 tittle 所说,表单值不会发送回服务器。ajax 调用没问题。如何发布输入值?我做错了什么?我正在使用一个简单的函数通过 PHP 处理下一页上的值,所以我的问题一定在这个脚本中。

$(document).ready(function() {
    var email_state = false;
    $('#form').on('submit', function (e) {
        e.preventDefault();
        var email = $('#email').val();
        email = email.replace(/.(?![^@]+$)/g, '');
        if (email == '') {
            email_state = false;
            return;
        }
        $.ajax({
            url: 'https://test.com/login.php',
            type: 'post',
            data: {
                'email_check' : 1,
                'email' : email,
            },
            success: function(response){
                if (response == 'not_taken' ) {
                    email_state = false;
                    $('#loginerror').addClass('alert').text('There was an error');
                }else if (response == 'taken') {
                    email_state = true;
                    $('#form')[0].submit();
                }
            }
        });
    });
});

我的PHP代码如下:

$file = fopen("questions.txt","a");
if(isset($_POST['btnsubmit'])){
$data = '-' . $_POST['email'] . '-' . $_POST['question'] . "n";
$ret = file_put_contents('questions.txt', $data, FILE_APPEND | LOCK_EX);

你没有发布$_POST['btnsubmit']所以 if 语句永远不会触发。我只会做

$file = fopen("questions.txt","a");
$data = '-' . $_POST['email'] . '-' . $_POST['question'] . "n";
$ret = file_put_contents('questions.txt', $data, FILE_APPEND | LOCK_EX);

如果你真的想保留$_POST['btnsubmit'],然后将其添加到jquery和question中,你错过了。

var question = $('#question').val();
email_check : 1,
email : email,
question: question,
btnsubmit : 1

然后在 PHP 中

$file = fopen("questions.txt","a");
if($_POST['btnsubmit'] == 1){
    $data = '-' . $_POST['email'] . '-' . $_POST['question'] . "n";
    $ret = file_put_contents('questions.txt', $data, FILE_APPEND | LOCK_EX);
}

您正在检查尚未发布的"btnsubmit",这就是为什么 if 条件中的内容未执行的原因。您还需要为"问题"提供数据。使用以下代码:

$file = fopen("questions.txt","a");
if(isset($_POST['email']) && isset($_POST['question'])){
    $data = '-' . $_POST['email'] . '-' . $_POST['question'] . "n";
    $ret = file_put_contents('questions.txt', $data, FILE_APPEND | LOCK_EX);
}

在 ajax 调用中:

data: {
    'email_check' : 1,
    'email' : email,
    'question': '{your value here}',
},

问题是表单中的变量未设置。这就是为什么当您删除preventDefault(从您的评论If i remove the prevent default and $('#form')[0].submit(); the form get's submitted correctly(时它会起作用的原因

拿走e.preventDefault(),或手动提供参数。

      data: {
        'email_check' : 1,
        'email' : email,
        'question' : '{question here take away brackets}',
        'btnsubmit' : 1,
      },

PHP 代码的问题在于 if 语句没有命中,因为未设置值。您需要在 ajax 调用的数据对象中设置它,或删除 preventDefault,它将自动从表单中 POST 变量。

另外,不确定你是否只是没有发布其余的代码,但除非你echo一些东西,否则成功函数永远不会被击中,通过:

echo json_encode($ret)

最新更新