为什么在WP中提交ajax联系表单时会出现“发布”404错误

时间:2013-06-05 17:10:08

标签: php jquery ajax wordpress contact-form

我正在为WordPress主题构建一个ajax联系表单,并在提交表单时遇到问题;控制台一直说它无法检索我的mail-form.php文件(用于格式化电子邮件),因为我很确定我的网址是否正确。

这是我正在使用的代码:

jQuery.ajax({
    type: "POST",
    url: "<?php echo get_template_directory_uri(); ?>/mail-form.php",
    cache: false,
    data: "name=" + name + "&email=" + email + "&message=" + message,
    success: function (html) {
        jQuery("#contact-form").slideUp("slow");
        jQuery("#contact-form").after("<p><span class='center' id='send-message'>Your message has been sent! We will reply shortly!</span></p>");
        jQuery("#send-message").fadeIn("slow");
    }
}); 

以下是表单的链接... http://wordpress-dev.designer17.com/contact/

我上次使用它时工作得很好,所以我对此感到非常困惑。

3 个答案:

答案 0 :(得分:0)

因为您在.js文件中使用PHP(第56行):

url: "<?php echo get_template_directory_uri(); ?>/mail-form.php",

您可以将其添加到主模板中:

var TEMPLATE_URI = "<?php echo get_template_directory_uri(); ?>";

然后在你的.js文件中使用:

url: TEMPLATE_URI + "/mail-form.php",

答案 1 :(得分:0)

在这种情况下,你的JavaScript,$ .ajax函数调用是客户端的,不是由php解析的,它是服务器端。因此,JavaScript解析器将字符串“”解释为文字字符串,并且不对其进行解析。要解决这个问题,请使用相对URL或在php模板中生成JavaScript,该模板可以解析php代码。

请记住:代码始终在服务器端解析/呈现,发送回客户端的浏览器,然后客户端脚本,在您的情况下的JavaScript代码,在浏览器中执行。

答案 2 :(得分:0)

我想你把你的javascript移到.js文件上,但是除非你指示你的http服务器处理javascript文件作为php,其中的任何php都只是文本。

将函数移回php文件或(更好的方法)将URL作为属性传递,例如:

// PHP FILE
<form action="URLGOESHERE" id="form_id">
  ...

// JAVASCRIPT FILE
var url = $("#form_id").attr("action");
jQuery.ajax({
    type: "POST",
    url: url,
    ...