下午好,
我有一个非常令人沮丧的问题。我目前正在尝试使用AJAX功能从我的Wordpress网站的联系表单中发送电子邮件。它只会在没有填写任何字段时发送电子邮件,但从我尝试在表单字段中提交数据的那一刻起,电子邮件就不会发送。
此外,出于某种原因,当我从Wordpress环境外部运行它时,它似乎有效,但从我将其包含在wordpress模板文件中的那一刻起,问题就开始发生了。
以下是我的代码。原谅目前没有任何错误或垃圾邮件处理:
这是Javascript:
$(document).ready(function(){
$('#emailform').submit(function(){
window.open('','',"width=500,height=150").document.write("Thank you for contacting us, we will reply you shortly. Thank you!");
// getting all the stuff from the form
var form = $(this),
formData = form.serialize(),
formUrl = form.attr('action'),
formMethod = form.attr('method'),
emailresponse = $('#emailresponse');
// loading stuff
emailresponse.fadeOut(200, function(){
$(this).text("Message sent")
.fadeIn(200)
});
// sending stuff to the server
$.ajax({
url: formUrl,
type: formMethod,
data: formData,
success:function(data) {
//stuff to do when the ajax call is successful and complete
var responseData = $.parseJSON(data),
klass = '';
emailresponse.fadeOut(200, function(){
$(this).text(responseData.message)
.fadeIn(200);
});
}
})
return false;
})
})
这是php
if (isset($_GET['action'])) {
if($_GET['action'] == 'email') {
$name = $_POST['name'];
$email = mysql_real_escape_string($_POST['email']);
$message = $_POST['message'];
$m1 = "Name of customer: " . $name . "\n";
$m2 = "Customer's Email: " . $email . "\n";
$m3 = "Message: " . $message;
$emailmessage = $m1 . $m2 . $m3;
mail('seedorf@me.com', 'Message from LUNASKYMODA.CO.UK contact page', $emailmessage);
$data = array(
'status' => $status,
'message' => $message
);
echo json_encode($data);
exit;
}
}
相关网页为http://lunaskymoda.co.uk/contact-us/
P.s,如果它说“发送消息”并不一定意味着它发送..仍在继续工作。
答案 0 :(得分:2)
好的,你有很多不同的东西在继续。首先,这是jQuery代码(一个javascript库),你的代码在整个地方缺少分号。试试这个:
$(document).ready(function(){
$('#emailform').submit(function(){
window.open('','',"width=500,height=150").document.write("Thank you for contacting us, we will reply you shortly. Thank you!");
// getting all the stuff from the form
var form = $(this);
formData = form.serialize();
formUrl = form.attr('action');
formMethod = form.attr('method');
emailresponse = $('#emailresponse');
// loading stuff
emailresponse.fadeOut(200, function(){
$(this).text("Message sent")
.fadeIn(200);
});
// sending stuff to the server
$.ajax({
url: formUrl,
type: formMethod,
data: formData,
success:function(data) {
//stuff to do when the ajax call is successful and complete
var responseData = $.parseJSON(data);
// klass = ''; <--what is this? you don't define 'klass' anywhere
emailresponse.fadeOut(200, function(){
$(this).text(responseData.message)
.fadeIn(200);
});
}
});
return false;
});
});
其次,只要我启动您的网站,我就会在控制台中收到此错误:
Uncaught TypeError: Object [object Object] has no method 'livequery' wp-e-commerce.js:273
因此,在您提交脚本之前,您的网站会出现javascript错误。尝试清除所有错误,因为如果链中存在更高的错误,javascript有一种破解方式并且根本不起作用。
第三,当我提交表单时,我收到此错误:
POST http://lunaskymoda.co.uk/contact-us/?action=email 404 (Not Found)
这可能是a)因为你的JS从第二个错误或b)中断了,因为当你使用jQuery处理表单时你仍然有html表单动作。所以:
第四,更改表格标签:
<form id="emailform" action="?action=email" method="post" accept-charset="utf-8" novalidate="novalidate">
以下内容:
<form id="emailform">
这一切都应该让你走上正轨。当您在控制台中查找错误时,JS的故障排除变得更加容易。在chrome中右键单击任意位置并单击“inspect element”,然后单击“console”。在FireFox中下载'firebug'添加。没有控制台的JS故障排除就像在黑暗中工作一样。
答案 1 :(得分:0)
似乎您的联系表单的操作参数未正确放置。
检查以获取参考:
http://www.wp-themix.org/wordpress/how-to-add-a-jquery-ajax-contact-form-to-wordpress/