mob*_*obi 12 php ajax wordpress jquery http-status-code-404
我是一名WordPress设计师,我为我的一个主题开发了一个联系表单,通过jQuery验证.
请检查下面的代码,然后阅读下面的注释.
$('.submitemail') .click(function() {
//VALIDATION CODE GOES HERE
if ( /*VALIDATED SUCCESSFULLY*/ ) {
$.ajax({
type: 'POST',
url: templatePath+'/lib/scripts/sendEmail.php',
data: 'visitorname=' + visitorname + '&visitoremail=' + visitoremail + '&visitormessage=' + visitormessage,
success: function(contactResults) {
//SUCCESS CODE
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
笔记:
问题:
在某些服务器中,当成功传递对sendEmail.php的ajax调用并处理php脚本并发送电子邮件时,不会触发成功处理程序.
当我用firebug检查为什么没有触发成功处理程序时,firebug显示"找不到404错误",这就像是一个误报.
可能的原因:
我认为某些服务器配置为阻止此类ajax调用.
这个奇怪的问题可能是什么原因造成的?怎么解决?
提前致谢.
@nowk:sendEmail.php代码是:
<?php
// Code for loading WordPress environment goes here //
$themeName_optionTree = get_option('option_tree');
$name = trim($_POST['visitorname']);
$email = $_POST['visitoremail'];
$message = $_POST['visitormessage'];
$site_owners_email = $themeName_optionTree['owner_email'];
$site_owners_name = $themeName_optionTree['owner_name'];
$email_subject = $themeName_optionTree['email_subject'];
$success_message = '<p class="success-box">' . $themeName_optionTree['success_message'] . '</p>';
if (strlen($name) < 2) {
$error['name'] = 1;
}
if (!preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/is', $email)) {
$error['email'] = 1;
}
if (strlen($message) < 2) {
$error['message'] = 1;
}
if (!$error) {
require_once('PHPMailer_v5.1/class.phpmailer.php');
$mail = new PHPMailer(true);
try {
$mail->From = $email;
$mail->FromName = $name;
$mail->Subject = $email_subject;
$mail->AddAddress($site_owners_email, $site_owners_name);
$mail->Body = $message;
$mail->Send();
echo $success_message;
} catch (phpmailerException $e) {
echo '<p class="warning-box">' . $e->errorMessage() . '</p>';
} catch (Exception $e) {
echo '<p class="warning-box">' . $e->getMessage() . '</p>';
}
}
?>
Run Code Online (Sandbox Code Playgroud)
请注意,即使ajax返回404,上面的代码也能完美执行,很奇怪吧!
Rud*_*die 28
由于服务器发送404(上帝知道是什么原因),有两种方法可以解决/规避这个问题:
success为completejQuery ajax调用,以便在请求完成时执行处理程序,无论服务器响应如何.您知道服务器响应(它始终有效).HTML应该仍然可以在jQuery complete处理程序中使用.header('HTTP/1.1 200 OK').由于脚本被执行,这将覆盖疯狂的404,jQuery将接收200并执行success处理程序.你可以尝试两个=)我很确定第一个会工作(但那不是那么干净).我也很确定第二个会工作,但我不知道Wordpress是否足以做出承诺=)
| 归档时间: |
|
| 查看次数: |
29807 次 |
| 最近记录: |