2015-12-12 50 views
0

我有一個奇怪的問題,我將數據從電子郵件表單(HTML5)傳遞給ajax/JSON並返回false,因此在提交按鈕後頁面不會重定向到php腳本被按下。

如果我把逗號分隔條件各data參數($email, $name, $message),只有「名」和「電子郵件」獲得通過,以$_POST[],留出$message值。

但是如果有所有的輸入由$_POST[]抓住了PARAMS之間沒有逗號。

例如(逗號):(不重定向到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

without逗號):(重定向到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的形式:

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 = '[email protected]'; 

$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確定什麼input通過form得到由$_POST[]抓?

+0

支持社區,請投了哪些解決您的問題,任何人的回答是正確答案..謝謝.. –

回答

1

你必須改變textarea的獲取價值的jQuery,試試下面的代碼爲: -

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

它可以幫助你。

1

用途:

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

我不接受你的答案心疼,我接受了其他的,因爲他/她所提供的全部解釋。但是,因爲你是正確的我也投你了:)非常感謝你的回答! – AnonDCX