【问题标题】:Passing form values through AJAX to php通过 AJAX 将表单值传递给 php
【发布时间】:2014-02-02 05:53:04
【问题描述】:

我在通过 Ajax 发送此表单时遇到了一些问题。我开始获取要发送的值,但在添加单选按钮 var messagetype 后就停止了。由于添加了变量,页面不再像以前那样传递任何值。

我认为它与 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='emailme@myemail.com';
$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;    
}
?>

我对此很陌生,并且已经按照一些教程来实现它,所以现在我对它为什么不起作用感到有点困惑。

任何帮助将不胜感激。

【问题讨论】:

    标签: php jquery post radio-button


    【解决方案1】:

    尝试使用对象作为数据参数。

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

    【讨论】:

    • 我选择了这个答案,因为我是新手,而且效果很好。它现在可以工作了,谢谢。我现在遇到的问题是传递 textarea 字段,我已将代码从 input#eventdesc 更改为 textarea#eventdesc 但仍然没有传递变量?
    【解决方案2】:

    使用serialize() or SerializeArray

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

    并将dataString 传递给$.ajax 中的数据变量data

    & 在 php 部分你可以得到表单中所有字段的值

    使用GET or POST方法

    messagetype 在您的表单中设置 隐藏字段 或将其附加到 dataString 以便您将在 php 文件中获得 messagetype

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 2023-03-09
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      相关资源
      最近更新 更多