$ _POST []没有捕获HTML表单输入

时间:2015-12-12 05:58:05

标签: javascript php jquery html ajax

我有一个奇怪的问题,我将数据从电子邮件表单(HTML5)传递到ajax / JSON并返回false,因此在提交按钮后页面不会重定向到php脚本按压。

如果我将逗号分隔给每个data param($email, $name, $message),则只有' name'和'电子邮件'传递给$_POST[],省略$message的值。

但如果params之间没有逗号,则所有输入都被$_POST[]捕获。

例如(逗号):(不会重定向到php脚本,但$message中未捕获$_POST[]

var form = $('.contact-form');
form.submit(function (evt) {
    $this = $(this);
    $.post('Scripts/php/sendemail.php',{
        name: $('input[name=name]').val(),
        email: $('input[name=email]').val(),
        message: $('input[name=message]').val()
    }, function(data) {
        $this.prev().text(data.message).fadeIn().delay(3000).fadeOut();
    },'json');
    evt.preventDefault();
    return false;
});

输出:

$name=foo
$email=bar
$message=null

页面返回false

不带逗号):(重定向到php脚本,但$message中包含$_POST[]

var form = $('.contact-form');
form.submit(function (evt) {
    $this = $(this);
    $.post('Scripts/php/sendemail.php',{
        name: $('input[name=name]').val()
        email: $('input[name=email]').val()
        message: $('input[name=message]').val()
    }, function(data) {
        $this.prev().text(data.message).fadeIn().delay(3000).fadeOut();
    },'json');
    evt.preventDefault();
    return false; (does not redirect to `php`)
});

输出:

$name=foo
$email=bar
$message=bar

HTML表单:

<form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="Scripts/php/sendemail.php">
    <div class="row">
        <div class="col-sm-6">
            <div class="form-group">
                <input type="text" name="name" class="form-control" required="required" placeholder="Name">
            </div>
        </div>
        <div class="col-sm-6">
            <div class="form-group">
                <input type="email" name="email" class="form-control" required="required" placeholder="Email address">
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-sm-12">
            <div class="form-group">
                <textarea name="message" id="message" required="required" class="form-control" rows="8" placeholder="Message"></textarea>
            </div>
            <div class="form-group">
                <button type="submit" id="submit" class="btn btn-danger btn-lg">
                    Send Message
                </button>
            </div>
        </div>
    </div>
</form>

JS for form:

var form = $('.contact-form');
form.submit(function (evt) {
    $this = $(this);
    $.post('Scripts/php/sendemail.php',
        {name: $('input[name=name]').val(),
        email: $('input[name=email]').val(),
        message: $('input[name=message]').val()
        }, function(data) {
                $this.prev().text(data.message).fadeIn().delay(3000).fadeOut();
           },'json');
    evt.preventDefault();
    return false;
});

PHP处理程序:

  <?php

header('Content-type: application/json');
$status = array(
    'type'=>'success',
    'message'=>'Email sent! Thankyou :)'
);

$name = $_POST['name'];
$email = $_POST['email'];
$subject = 'query';
$message = $_POST['message'];
$email_from = $email;
$email_to = 'keilcarpenter01@gmail.com';

$body = 'Name: ' . $name . "\n\n" . 'Email: ' . $email . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message;

$success = mail($email_to, $subject, $body, 'From: visitor');

echo json_encode($status);
#start buffering (all activity to the buffer)
ob_start() ;

# dumps to buffer
var_dump($_POST) ;

# dump buffered $classvar to $outStringVar
$outStringVar = ob_get_contents() ;

# open your file with append, read, write perms
# (be sure to check your file perms)
$fp=fopen('dmp.txt','a+');

# write output to file & close it
fwrite($fp, $outStringVar );
fclose($fp);

# clean the buffer & stop buffering output
ob_end_clean() ;
die;

在这种情况下,comma seperatores如何确定inputform $_POST[]抓住的this.refs.userTextRef

2 个答案:

答案 0 :(得分:1)

使用:

message: $('textarea[name=message]').val()

答案 1 :(得分:1)

您必须更改jquery以获取textarea的值,请尝试以下代码: -

var form = $('.contact-form');
form.submit(function (evt) {
    $this = $(this);
    $.post('Scripts/php/sendemail.php',
        {name: $('input[name=name]').val(),
        email: $('input[name=email]').val(),
        message: $('textarea[name=message]').val()
        }, function(data) {
                $this.prev().text(data.message).fadeIn().delay(3000).fadeOut();
           },'json');
    evt.preventDefault();
    return false;
});

它可能对你有帮助。