我是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
,以便无论服务器响应如何,在完成请求后都将执行处理程序。您知道服务器的响应(它始终有效)。HTML仍应在jQuery complete
处理程序中可用。header('HTTP/1.1 200 OK')
。由于脚本已执行,这将覆盖疯狂的404,而jQuery将收到200并执行success
处理程序。您可以同时尝试两个=)我很确定第一个可以工作(但这不是很干净)。我也很确定第二个可以工作,但是我对Wordpress的了解还不够,无法做出承诺=)
问题内容: 我一直在用这个把头砸在砖墙上,我已经尝试了很多关于stackoverflow的解决方案,但是找不到一个可行的解决方案! 基本上,当我发布我的AJAX时,PHP返回JSON,但AJAX显示的是Undefined而不是值: JS : PHP的 : firebug的JSON结果 : AJAX将JSON结果显示为Undefined,我不知道为什么。我尝试显示添加和。我也曾尝试将其更改为and
问题内容: 我想从PHP脚本返回JSON。 我只是回应结果吗?我必须设置标题吗? 问题答案: 通常,没有它会没事,但是您可以并且应该设置Content-Type标头: 如果不使用特定的框架,通常会允许一些请求参数来修改输出行为。通常,为了快速进行故障排除,不发送标头,或者有时将数据有效载荷print_r盯着它很有用(尽管在大多数情况下,它不是必需的)。
问题内容: 例如我有一个功能: 我怎样才能返回AJAX后得到的? 问题答案: 因为请求是异步的,所以您无法返回ajax请求的结果(而同步ajax请求是一个 糟糕的 主意)。 最好的选择是将自己的回调传递给f1 然后,您将像这样致电:
问题内容: 我一直在用这个把头砸在砖墙上,我已经在stackoverflow上尝试了很多解决方案,但找不到一个可行的方案! 基本上,当我发布我的AJAX时,PHP返回JSON,但是AJAX显示Undefined而不是值: JS : PHP的 : firebug的JSON结果 : AJAX将JSON结果显示为Undefined,我不知道为什么。我尝试显示添加和。我也曾尝试将其更改为and:尽管仍然没
问题内容: 如果PHP脚本在某处失败,是否有办法使PHP返回AJAX错误代码?我正在关注一个教程,并将其输入到我的PHP中: 一切都很好,直到我意识到这是JSON数据。有没有一种方法可以使用标准的$ _POST和返回的HTML数据返回错误(例如,触发jQuery的AJAX 事件? 问题答案: 我不了解jQuery,但是如果它区分成功和失败(HTTP 200 OK vs. HTTP!= 200)Aj
问题内容: 我通过jQuery AJAX将一些数据发布到PHP脚本中,并且一切正常执行,但是返回了404错误。在我的Firebug控制台中,PHP脚本的响应是正确的。我不了解该脚本如何响应,它仍然会引发404错误。jQuery的“错误”回调方法将触发,而“成功”方法则不会触发。 PHP脚本执行的所有语句都能正常工作,因为我可以看到数据库正在更新等。 我在Dreamhost托管的WordPress