我是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 } }); } });
笔记:
问题:
在某些服务器中,当成功成功传递对sendEmail.php的ajax调用并处理php脚本并发送电子邮件时,不会触发成功处理程序。
当我检查萤火虫以查看为什么未触发成功处理程序时,萤火虫显示“未找到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>'; } } ?>
请注意,即使ajax返回404,上述代码也能完美执行,很奇怪!
由于服务器发送了404(上帝知道是什么原因),因此有两种方法可以解决/避免这种情况:
success
complete
header('HTTP/1.1 200 OK')
您可以同时尝试两个=)我很确定第一个可以工作(但这不是很干净)。我也很确定第二个可以工作,但是我对Wordpress的了解还不够,无法做出承诺=)