表单值不会发送回服务器

时间:2018-03-03 04:56:20

标签: javascript php jquery ajax

正如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);

3 个答案:

答案 0 :(得分:0)

问题是表单中的变量未设置。当您删除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)

答案 1 :(得分:0)

你不是POST $_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以及问题,那你就错过了。

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);
}

答案 2 :(得分:0)

您正在检查' 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}',
},