我的网页上的表单有问题。我正在尝试使用ajax和json将表单值发送到php服务器,但是我无法正确地创建json对象。
我的JS代码
function sendJsonOpenPopout () { $('.submitBtn').click(function(e){ e.preventDefault(); var subject = $('.subject').val(); var email = $('.email').val(); var message = $('.message').val(); var dataObject = { subject: subject, email: email, message: message } $.ajax({ type: 'POST', url: '../../kontakt.php', contentType: "application/json", dataType: 'json', data: dataObject, success: function(data){ alert('Items added'); }, error: function(){ console.log('You have fail'); } //success: function(){ //var createdDiv = '<div class="divToBeCentered"><p class="dataText">Wiadomość została wysłana pomyślnie.\brDziękuję za kontakt.</p></div>'; //$('body').append(createdDiv); //} }); });
我的PHP代码
<?php $str_json = file_get_contents('php://input'); //($_POST doesn't work here) $response = json_decode($str_json, true); // decoding received JSON to array $subject = $response[0]; $from = $response[1]; $message = $response[2]; $to = "lubycha@gmail.com"; $subject = $_POST['subject']; $from = $_POST['email']; $message = $_POST['message']; $headers = "Content-Type: text/html; charset=UTF-8"; mail($to,$subject,$message,$headers); ?>
我知道已经问过类似的问题,但是答案并没有帮助我。
感谢您的帮助。
我能够获取json对象并在php端进行解析。某些变量的名称可能有所不同,部分原因是其中一些是预先编写的代码。这是我采取的步骤。
资料夹结构
js/script.js php/get_data.php index.html
Index.html 一种基本形式。
<div id="feedback_panel" class="panel panel-default"> <form id="feedbackform" name="feedbackform" method="post"> <div class="form-group" id="email_wrapper" data-toggle="popover" data-container="body" data-placement="right"> <label class="control-label" for="email">E-mail:</label> <input type="email" class="form-control" id="email" name="email" placeholder="email@example.com" required> <span class="help-block"> </span> </div> <div class="form-group" id="subject_wrapper" data-toggle="popover" data-container="body" data-placement="right"> <label class="control-label" for="subject">Subject:</label> <input type="text" class="form-control" id="subject" name="subject" placeholder="Subject" required> <span class="help-block"> </span> </div> <div class="form-group" id="description_wrapper" data-toggle="popover" data-container="body" data-placement="right"> <label class="control-label" for="message">message:</label> <textarea type="text" class="form-control" id="message" name="message" placeholder="message." required></textarea> <span class="help-block"> </span> </div> <button type="submit" id="feedback_submit" class="btn btn-success">Submit</button> </form> </div>
*提交时, *script.js 收集数据并将其设置为对象,然后通过ajax发送到php。
$(function() { // process the form $('#feedbackform').submit(function(event) { // get the form data - obj that will POSTED to get_data.php var formData = { 'email' : $('#email').val(), 'subject' : $('#subject').val(), 'message' : $('#message').val() }; // process the forum $.ajax({ type : 'POST', // define the type of HTTP verb we want to use (POST for our form) url : 'php/get_data.php', // the url where we want to POST data : formData, // our data object dataType : 'json', // what type of data do we expect back from the server encode : true }) // using the done promise callback .done(function(data) { // log data to the console so we can see if ( ! data.success) { console.log(data); } else { console.log(data); } }); // stop the form from submitting the normal way and refreshing the page event.preventDefault(); }); });
get_data.php 从script.js接收数据,进行一些验证,然后发送并发送电子邮件。
<?php $errors = array(); // array to hold validation errors $data = array(); // array to pass back data // validate the variables ====================================================== // if any of these variables don't exist, add an error to our $errors array $email; $subject; $message; //check to see if the data exist, else write an error message, function check_data(){ $user_inputs = array(); if (empty($_POST['email'])){ $errors['email'] = 'Email is required.'; return false; }else{ $email = $_POST['email']; array_push($user_inputs,$email); } if (empty($_POST['subject'])){ $errors['subject'] = 'subject is required.'; return false; }else{ $subject = $_POST['subject']; array_push($user_inputs,$subject); } if (empty($_POST['message'])){ $errors['message'] = 'message is required.'; return false; }else{ $message = $_POST['message']; array_push($user_inputs,$message); } return $user_inputs; } //getting array of data from check_data $verify_data = check_data(); // return a response =========================================================== // if there are any errors in our errors array, return a success boolean of false if ( ! empty($errors)) { // if there are items in our errors array, return those errors $data['success'] = false; $data['errors'] = $errors; echo json_encode($data); } else { // show a message of success and provide a true success variable $data['success'] = $verify_data; $data['message'] = 'Success!'; //if everything is good, sent an email. if($verify_data != false){ send_email($verify_data); } } function send_email($info_data){ // person who it going $to = 'Email, Some <some_email@mailinator.com>'; //subject of the email $subject = $info_data[1]; $result = str_replace(' ', ' ', $info_data[2]); $result = nl2br($result); $result = wordwrap($result, 70, "\r\n"); //body of the email. $message = "<html><body>"; $message .= "<p style = 'width: 400px;'>" . $result . "</p>"; $message .= "<br/>"; $message .= "</body></html>"; $headers = "From: Email, Some <some_email@mailinator.com>" . "\r\n" . 'Reply-To: '. $info_data[0] . "\r\n" ."X-Mailer: PHP/" . phpversion(); $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=UTF-8"; //sent mail: check to see if it was sent. if(mail($to, $subject, $message, $headers)){ $data["went"] = "went"; $data['message'] = 'Success!'; }else{ $data["went"] = "didn't go"; $data['message'] = 'Sorry!'; } // echo the log echo json_encode($data); } ?>
有很多要掩饰的,如果您有任何问题,请告诉我。我很乐意回答。