2013-03-08 35 views
7

Cảm ơn bạn đã dành thời gian để xem, các bạn. Tôi đang tạo một biểu mẫu liên hệ AJAX khá cơ bản bằng cách sử dụng jQuery. Email gửi đi, nhưng khi mở email, không có dữ liệu POST, vì vậy tôi chỉ nhận được các chuỗi mà tôi đã định nghĩa trong tập lệnh PHP. Trên ứng dụng email của điện thoại của tôi, nội dung của email có nghĩa là 'không xác định'. Tôi đã thử thêm các loại dữ liệu tiêu đề khác nhau không có sẵn và một số biến thể trên hàm PHP mail().Biểu mẫu AJAX jQuery bằng cách sử dụng thư() Mã PHP gửi email, nhưng dữ liệu POST từ biểu mẫu HTML không được xác định

Tôi sẵn sàng chấp nhận một giải pháp dễ dàng hơn cho một biểu mẫu AJAX đơn giản, vì vậy cảm ơn trước vì bất kỳ phương pháp tiếp cận mới nào.

Dưới đây là hình thức:

<section id="left"> 
     <label for="form_name">Name</label> 
     <input name="form_name" id="form_name" type="text" > 

     <label for="form_email">Email</label> 
     <input name="form_email" id="form_email" type="email" > 
    </section> 

    <section id="right"> 
     <label for="form_msg">Message</label> 
     <textarea name="form_msg" id="form_msg"></textarea> 
     <input id="submit" class="button" name="submit" type="submit" value="Send"> 
    </section> 

</form> 

Các jQuery AJAX:

$(function() { 
    $("#contact .button").click(function() { 
     var name = $("#form_name").val(); 
     var email = $("#form_email").val(); 
     var text = $("#msg_text").val(); 
     var dataString = 'name='+ name + '&email=' + email + '&text=' + text; 

     $.ajax({ 
      type: "POST", 
      url: "email.php", 
      data: dataString, 
      success: function(){ 
      $('.success').fadeIn(1000); 
      } 
     }); 

     return false; 
    }); 
}); 

Các kịch bản PHP (tập tin bên ngoài 'email.php'):

<?php 
if($_POST){ 
    $name = $_POST['form_name']; 
    $email = $_POST['form_email']; 
    $message = $_POST['form_msg']; 

//send email 
    mail("[email protected]", "This is an email from:" .$email, $message); 
} 
?> 

Trả lời

16

Không cần tạo chuỗi truy vấn. Chỉ cần đặt các giá trị của bạn vào một đối tượng và jQuery sẽ xử lý phần còn lại cho bạn.

var data = { 
    name: $("#form_name").val(), 
    email: $("#form_email").val(), 
    message: $("#msg_text").val() 
}; 
$.ajax({ 
    type: "POST", 
    url: "email.php", 
    data: data, 
    success: function(){ 
     $('.success').fadeIn(1000); 
    } 
}); 
+1

Tôi đã sử dụng nó và nó hoạt động tốt, kết hợp với việc thay đổi kịch bản PHP của tôi như được định nghĩa bởi EmCO và Garis. Cảm ơn tất cả! –

4

Bạn' sử dụng thông số bài đăng sai:

var dataString = 'name='+ name + '&email=' + email + '&text=' + text; 
         ^^^^-$_POST['name'] 
             ^^^^--$_POST['name'] 
             etc.... 

ID javascript/html không liên quan đến POST thực tế, đặc biệt khi bạn tạo chuỗi dữ liệu của riêng mình và không sử dụng cùng các ID đó.

+0

Cảm ơn rất nhiều, điều này kết hợp với băm dữ liệu làm việc một cách hoàn hảo! –

0

kịch bản PHP của bạn (tập tin bên ngoài 'email.php') nên trông như thế này:

<?php 
if($_POST){ 
    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $message = $_POST['text']; 

//send email 
    mail("[email protected]", "51 Deep comment from" .$email, $message); 
} 
?> 
+0

Cảm ơn rất nhiều, điều này kết hợp với băm dữ liệu hoạt động hoàn hảo! –

4

Bạn đang sử dụng tên thông số sai, hãy thử:

if($_POST){ 
    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $message = $_POST['text']; 

//send email 
    mail("[email protected]", "51 Deep comment from" .$email, $message); 
} 
+0

Cảm ơn rất nhiều, điều này kết hợp với băm dữ liệu hoạt động hoàn hảo! –

6

Để lại của bạn mã email.php giống nhau, nhưng thay thế mã JavaScript này:

var name = $("#form_name").val(); 
     var email = $("#form_email").val(); 
     var text = $("#msg_text").val(); 
     var dataString = 'name='+ name + '&email=' + email + '&text=' + text; 

     $.ajax({ 
      type: "POST", 
      url: "email.php", 
      data: dataString, 
      success: function(){ 
      $('.success').fadeIn(1000); 
      } 
     }); 

với điều này:

$.ajax({ 
     type: "POST", 
     url: "email.php", 
     data: $(form).serialize(), 
     success: function(){ 
     $('.success').fadeIn(1000); 
     } 
    }); 

Vì vậy, tên đầu vào biểu mẫu của bạn khớp với nhau.

+0

Đặt biểu mẫu dưới dấu ngoặc kép trong bộ chọn jQuery – FrenchFalcon

1

Bạn mã nên là:

<section id="right"> 
     <label for="form_msg">Message</label> 
     <textarea name="form_msg" id="#msg_text"></textarea> 
     <input id="submit" class="button" name="submit" type="submit" value="Send"> 
    </section> 

Js

var data = { 
    name: $("#form_name").val(), 
    email: $("#form_email").val(), 
    message: $("#msg_text").val() 
}; 
$.ajax({ 
    type: "POST", 
    url: "email.php", 
    data: data, 
    success: function(){ 
     $('.success').fadeIn(1000); 
    } 
}); 

Các PHP:

<?php 
if($_POST){ 
    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $message = $_POST['text']; 

//send email 
    mail("[email protected]","My Subject:",$email,$message); 
} 
?> 
Các vấn đề liên quan