2014-01-14 54 views
0

我在通过Ajax发送此表单时遇到了一些麻烦。我开始让价值发送通过,但一旦添加单选按钮var messagetype就停下来。由于添加变量,页面不再通过任何值,而是像以前那样通过它们。将表单值通过AJAX传递给php

我认为它与var dataString有关,并且值没有正确通过,并且自从添加var messagetype后它开始出错,它必须从这里开始。

我已经玩了var messagetype的代码,添加了一个类并尝试了,写了几个方法但仍无济于事。

这里是我的代码:

js

$('#formsend').click(function(){ 

var name = $("input#name").val(); 
var email = $("input#email").val(); 
var phone = $("input#phone").val(); 
//Where I think it's going wrong: 
var messagetype = $("input[name='messagetype']:checked").val(); 

var trackurl = $("input#trackurl").val(); 
var trackdesc = $("input#trackdesc").val(); 

var eventdate = $("input#eventdate").val(); 
var eventdesc = $("input#eventdesc").val(); 
var adrsone = $("input#adrsone").val(); 
var adrstwo = $("input#adrstwo").val(); 
var adrsthree = $("input#adrsthree").val(); 
var pcode = $("input#pcode").val(); 

var detail = $("input#subject").val(); 
var note = $("input#note").val(); 


    var dataString = 'name='+ name + '&email=' + email + '&phone=' + phone +'&messagetype=' + messagetype + '&trackurl=' + trackurl + '&trackdesc=' + trackdesc + '&eventdate=' + eventdate + '&eventdesc=' + eventdesc + '&adrsone=' + adrsone + '&adrstwo=' + adrstwo + '&adrsthree=' + adrsthree + '&pcode=' + pcode + '&detail=' + detail + '&note=' + note; 


$.ajax({ 
    type: "POST", 
    url: "processmail.php", 
    data: dataString, 
    success: function() { 
    $('#form').html("<div id='message'></div>"); 
    $('#message').html("<h2>Message Submitted.</h2>") 
    .append("<p>Thank you for contacting me, I will be in touch soon.</p>") 
    .hide() 
    .fadeIn(1500); 
    } 
}); 
return false; 

}); //end form ajax 

processmail.php

<?php 
$name=sanitiseString($_POST['name']); 
$email=sanitiseString($_POST['email']); 
$phone=sanitiseString($_POST['phone']); 

$messagetype=sanitiseString($_POST['messagetype']); 

$trackurl=sanitiseString($_POST['trackurl']); 
$trackdesc=sanitiseString($_POST['trackdesc']); 

$eventdate=sanitiseString($_POST['eventdate']); 
$eventdesc=sanitiseString($_POST['eventdesc']); 
$adrsone=sanitiseString($_POST['adrsone']); 
$adrstwo=sanitiseString($_POST['adrstwo']); 
$adrsthree=sanitiseString($_POST['adrsthree']); 
$pcode=sanitiseString($_POST['pcode']); 

$detail=sanitiseString($_POST['detail']); 
$note=sanitiseString($_POST['note']); 

$to='[email protected]'; 
$subject='Message from Form: '.$messagetype; 
$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
$headers .='From: '.$name; 
$headers .='Reply-To: '.$email; 

if($messagetype == 'track'){ 
$message='<table> 
     <tr><td>Name: </td><td>'.$name.'</td></tr> 
     <tr><td>Email: </td><td>'.$email.'</td></tr> 
     <tr><td>Track Description: </td><td>'.$trackdesc.'</td></tr> 
     <tr><td>Track Link: </td><td>'.$trackurl.'</td></tr> 
     <table>'; 

} 
elseif($messagetype == 'event'){ 
$message='<table> 
     <tr><td>Name: </td><td>'.$name.'</td></tr> 
     <tr><td>Email: </td><td>'.$email.'</td></tr> 
     <tr><td>Event Description: </td><td>'.$eventdesc.'</td></tr> 
     <tr><td>Event Date: </td><td>'.$eventdate.'</td></tr> 
     <tr><td>Location: </td><td>'.$adrsone.'</td></tr> 
     <tr><td>&nbsp;</td><td>'.$adrstwo.'</td></tr> 
     <tr><td>&nbsp;</td><td>'.$adrsthree.'</td></tr> 
     <tr><td>&nbsp;</td><td>'.$pcode.'</td></tr> 
     <table>'; 

} 
elseif($messagetype == 'message'){ 
$message='<table> 
     <tr><td>Name: </td><td>'.$name.'</td></tr> 
     <tr><td>Email: </td><td>'.$email.'</td></tr> 
     <tr><td>Subject: </td><td>'.$detail.'</td></tr> 
     <tr><td>Message: </td><td>'.$note.'</td></tr> 
     <table>'; 

} 

    mail($to, $subject, $message, $headers); 



function sanitiseString($var) 
{ 
$var = stripslashes($var); 
$var = htmlentities($var); 
$var = strip_tags($var); 
return $var;  
} 
?> 

我是新来这一点,并遵循一些教程来实现它,我现在有点卡住,以为什么它不起作用。

任何帮助将不胜感激。

回答

2

尝试使用对象数据PARAM。

$.ajax({ 
    type: "POST", 
    url: "processmail.php", 
    data: {'name': name, 
     'email': email}, 
    success: function() { 
    $('#form').html("<div id='message'></div>"); 
    $('#message').html("<h2>Message Submitted.</h2>") 
    .append("<p>Thank you for contacting me, I will be in touch soon.</p>") 
    .hide() 
    .fadeIn(1500); 
    } 
}); 
+0

我选择了这个答案,因为我是一个新手,它工作得很好。现在正在工作,谢谢。我现在遇到的问题是通过textarea字段,我已经将代码从'input#eventdesc'更改为'textarea#eventdesc',但仍然没有通过变量传递? – ThePagan

3

使用serialize() or SerializeArray

var dataString = $('#FORMID').serialize(); 

data

在PHP节 &传递dataString$.ajax数据变量,你可以进去使用GET or POST形式

本领域的所有值方法

messagetype设置隐藏字段在形式或将其追加到dataString所以你会在你的PHP文件中获取消息类型