javascript - php 没有收到来自 ajax 类型帖子的任何请求,是否需要在邮件中提及用户名和密码
问题描述
我正在处理联系页面表单以发送电子邮件。
我编写了 HTML 表单来获取用户详细信息并在contactform.js文件中执行表单验证。在同一个 JavaScript 文件中,我编写了ajax POST 调用来调用contact_mail.php。
我在互联网上发现了许多类似的问题,但问题是 - 在我的本地机器上的表单提交按钮php被调用,但这在远程 Web 服务器中没有发生。
如果我通过从表单定义中删除来避免调用contactform.js ,则会调用php,但我会丢失所有验证。:(如果我通过在表单定义中指定来调用contactform.js ,那么验证会很好地执行,但是提交时没有任何反应,因为没有调用PHP。class="contactForm"
class="contactForm"
我不知道我做错了什么......这是我的代码......
HTML 表单如下所示:
<form action="contactform/contact_mail.php" method="post" role="form" class="contactForm">
<div class="form-group">
<input type="text" name="name" class="form-control" id="name" placeholder="Your Name" data-rule="minlen:4" data-msg="Please enter at least 4 chars" />
<div class="validation"></div>
</div>
<div class="form-group">
<input type="email" class="form-control" name="email" id="email" placeholder="Your Email" data-rule="email" data-msg="Please enter a valid email" />
<div class="validation"></div>
</div>
<div class="form-group">
<input type="phone" class="form-control" name="phone" id="phone" placeholder="Your Contact" data-rule="phone" data-msg="Please enter a valid contact number" />
<div class="validation"></div>
</div>
<div class="form-group">
<input type="text" class="form-control" name="subject" id="subject" placeholder="Subject" data-rule="minlen:4" data-msg="Please enter at least 8 chars of subject" />
<div class="validation"></div>
</div>
<div class="form-group">
<textarea class="form-control" name="message" rows="5" data-rule="required" data-msg="Please write something for us" placeholder="Message"></textarea>
<div class="validation"></div>
</div>
<div class="text-center"><button type="submit">Send Message</button></div>
</form>
</div>
</div>
这是我的 javascript contactform.js 文件
jQuery(document).ready(function($) {
"use strict";
//Contact
$('form.contactForm').submit(function(e) {
var f = $(this).find('.form-group'),
ferror = false,
emailExp = /^[^\s()<>@,;:\/]+@\w[\w\.-]+\.[a-z]{2,}$/i,
phoneExp = ^\+[0-9]{1,3}\.[0-9]{4,14}(?:x.+)?$;
/*phoneExp = /^\d{10}$/;*/
f.children('input').each(function() { // run all inputs
var i = $(this); // current input
var rule = i.attr('data-rule');
if (rule !== undefined) {
var ierror = false; // error flag for current input
var pos = rule.indexOf(':', 0);
if (pos >= 0) {
var exp = rule.substr(pos + 1, rule.length);
rule = rule.substr(0, pos);
} else {
rule = rule.substr(pos + 1, rule.length);
}
switch (rule) {
case 'required':
if (i.val() === '') {
ferror = ierror = true;
}
break;
case 'minlen':
if (i.val().length < parseInt(exp)) {
ferror = ierror = true;
}
break;
case 'email':
if (!emailExp.test(i.val())) {
ferror = ierror = true;
}
break;
case 'phone':
if (!phoneExp.test(i.val())) {
ferror = ierror = true;
}
break;
case 'checked':
if (! i.is(':checked')) {
ferror = ierror = true;
}
break;
case 'regexp':
exp = new RegExp(exp);
if (!exp.test(i.val())) {
ferror = ierror = true;
}
break;
}
i.next('.validation').html((ierror ? (i.attr('data-msg') !== undefined ? i.attr('data-msg') : 'wrong Input') : '')).show('blind');
}
});
f.children('textarea').each(function() { // run all inputs
var i = $(this); // current input
var rule = i.attr('data-rule');
if (rule !== undefined) {
var ierror = false; // error flag for current input
var pos = rule.indexOf(':', 0);
if (pos >= 0) {
var exp = rule.substr(pos + 1, rule.length);
rule = rule.substr(0, pos);
} else {
rule = rule.substr(pos + 1, rule.length);
}
switch (rule) {
case 'required':
if (i.val() === '') {
ferror = ierror = true;
}
break;
case 'minlen':
if (i.val().length < parseInt(exp)) {
ferror = ierror = true;
}
break;
}
i.next('.validation').html((ierror ? (i.attr('data-msg') != undefined ? i.attr('data-msg') : 'wrong Input') : '')).show('blind');
}
});
if (ferror) return false;
else var str = $(this).serialize();
var action = $(this).attr('action');
if( ! action ) {
action = 'contactform/contact_mail.php';
}
$.ajax({
type: "POST",
url: action,
data: str,
success: function(msg) {
// alert(msg);
if (msg == 'OK') {
$("#sendmessage").addClass("show");
$("#errormessage").removeClass("show");
$('.contactForm').find("input, textarea").val("");
} else {
$("#sendmessage").removeClass("show");
$("#errormessage").addClass("show");
$('#errormessage').html(msg);
}
}
});
return false;
});
});
我的contact_mail.php 文件
<?php
/* send mail new*/
/* start - send mail */
require_once('contactform/class.phpmailer.php');
require_once('contactform/PHPMailerAutoload.php');
require_once('contactform/class.smtp.php');
if(isset($_POST["Submit"]))
{
$name=$_POST['name'];
$email=$_POST['email'];
$phone=$_POST['phone'];
$message=$_POST['message'];
$body = '<html><body>';
$body .= '<h2>Customer Enquiry </h2><br>';
$body .= '<table rules="all" style="background-color: #EBF4FA;" cellpadding="10">';
$body .= "<tr><td><strong>Name:</strong> </td><td>" . strip_tags($_POST['name']) . "</td></tr>";
$body .= "<tr><td><strong>Email:</strong> </td><td>" . strip_tags($_POST['email']) . "</td></tr>";
$body .= "<tr><td><strong>Contact No. :</strong> </td><td>" . strip_tags($_POST['phone']) . "</td></tr>";
$body .= "<tr><td><strong>Message:</strong> </td><td>" . strip_tags($_POST['message']) . "</td></tr>";
$body .= "</table>";
$body .= "</body></html>";
$to = "receiver address";
$subject = " Enquiry Form";
$headers = "From: info@xyz.com" . "\r\n" .
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";
$res="OK";
if (mail($to,$subject,$body,$headers))
{
return $res;
}
else
{
return false;
}
header( "refresh:0;url=index.html");
}?>
实际上,我正在初学者级别学习 php 语言。应该怎么做才能成功发送邮件并获得成功或失败消息。
解决方案
提交表单处理程序似乎没有阻止默认提交事件。尝试在处理程序的开头添加 '''e.preventDefault()'''。
推荐阅读
- c# - 连接到长时间运行的套接字 API
- java - 如何删除输出中的空最后一行?
- android - Okhttp interceptor for NewRelic?
- c# - 无法使用 c# 以编程方式访问 iis 远程服务器
- elasticsearch - Elasticsearch 匹配数组使用
- powershell - 找不到 SqlServerIntegrationService 的路径,但确实存在
- sql - Use for loop in Oracle SQL developer
- php - 删除功能无法在php ajax中删除表中的一行
- pyspark - get date Intervals in pyspark
- javascript - How to append to Map JavaScript?