2016-09-18 71 views
1

因此,我正在制作一个电子邮件表单,并使用AJAX链接到使用PHPMailer发送电子邮件的外部PHP文件。所以我在PHP的顶部验证码:表单字段值没有被传递给PHP文件

if(count($_POST) > 0){ 

    $message= 
    'Full Name: '.$_POST['name'].'<br /> 
    Email: '.$_POST['email'].'<br /> 
    Message: '.$_POST['textarea'].'<br /> 
    Current Website: '.$_POST['website'].'<br /> 
    Business Name: '.$_POST['business'].'<br /> 
    '; 

,并

  • 在本地主机使用WAMP,这将很好地工作,并会发送电子邮件与各自领域
  • 在现场版本,电子邮件不通过在PHP文件中的if(count($_POST) > 0)
  • 如果if语句被删除,它确实发送电子邮件,我收到它,但电子邮件只有“全名:”和“电子邮件:”等填充空白和n o从HTML表单输入的值。这里是AJAX代码:

    var ajax = { 
        isSubmiting: false, 
        send: function() { 
    
         if(ajax.isSubmiting == false) { 
          ajax.isSubmiting = true; 
    
          var name = $("input[name=name]").val(); 
          var email = $("input[name=email]").val(); 
          var textarea = $("textarea").val(); 
          var business = $("input[name=business]").val(); 
          var website = $("input[name=website]").val(); 
    
           ajax.SetText("Sending..."); 
           $.post("sendmail.php", { 
            name: name, email: email, textarea: textarea, business: business, website: website 
           }, function(data) { 
            if (data.trim() == "true") { 
    
             ajax.SetText("Sent!"); 
             console.log(data); 
    
    
             $.get("sent.html", function(sentData){ 
    
              $("#content").html(sentData); 
    
             }); 
    
            } else { 
             ajax.SetText("Send mail"); 
             console.log(data); 
             $.get("unsent.html", function(sentData){ 
    
              $("#content").html(sentData); 
    
             }); 
    
    
            } 
    
            ajax.isSubmiting = false; 
           }); 
    
         } 
         else alert("You can only send one email at a time!"); 
        }, 
        SetText: function(text) { 
         $("input[type=button]").val(text); 
        } 
    } 
    

,这是形式的HTML标记:

<form name="contact-form" method="post" id="contact-form"> 

         <h3> We want to hear from you! Tell us about your business and/or project and what you need and we'll get back to you as soon as possible! </h3> 

          <div class="form-group"> 

           <label for="name">Your Name:</label> 
           <input type="text" name="name" class="form-control" placeholder="Your Name" required/> 

          </div> 

          <div class="form-group"> 

           <label for="email">Your Email:</label> 
           <input type="email" name="email" class="form-control" placeholder="Your Name" required/> 

          </div> 
          <div class="form-group"> 

           <label for="web">Current Website (if available):</label> 
           <input type="text" name="website" class="form-control" placeholder="Current Website (if available)"/> 

          </div> 

          <div class="form-group"> 

           <label for="web">Business Name (if available):</label> 
           <input type="text" name="business" class="form-control" placeholder="Business Name (if available)"/> 

          </div> 

          <div class="form-group"> 

           <label for="comment">Message:</label> 
           <textarea id="textarea" rows="5" class="form-control" name="textarea" placeholder="Message"></textarea> 

          </div> 

          <div class="row" align="center" id="button-row2"> 

           <input type="button" value="Submit" onClick="ajax.send()" class="btn"> 

          </div> 

        </form> 

任何想法,为什么这可能是这样吗?

+0

你能否证实,在这两种情况下(测试和生活)你的AJAX代码正在运行,而不是形式开始提交的HTML表单到同一页面的URL它的位置? – fvgs

+0

另外,你可以确认变量'名称,电子邮件,textarea等'是否填充之前,在实时环境中发送? – fvgs

+0

@fvgs我确定AJAX正在运行,因为在$ .post之后,它表示数据== true,它将以其他方式返回。我猜,这意味着它首先经历了它。而且我为每个变量输入了值,但是如何确认? –

回答

0

jQuery在您的实时环境中无法正确访问。因此,

var name = $("input[name=name]").val(); 
var email = $("input[name=email]").val(); 
var textarea = $("textarea").val(); 
var business = $("input[name=business]").val(); 
var website = $("input[name=website]").val(); 

undefined

+0

那么我该如何解决这个问题? –

+0

这只是一个理论;你需要确认这是否如我在上面的评论 – fvgs

+0

中所述的情况下,在if(count($ _ POST)> 0)之前的PHP中,好吧,所以我在控制台中看到它们。另外,在当地它完美的作品。但在实况上,它好像一旦接近'if(count($ _ POST)> 0)',它就会忽略它下面的所有内容 –