如何在WordPress中将值从ajax传递给php?

时间:2015-07-06 12:47:54

标签: php jquery ajax wordpress

我试图通过将我的JS页面中的值传递到Wordpress中的PHP页面来发送邮件,直到AJAX部分

jQuery.ajax({
    type: "POST",
    url:"contact.php",
    data: "frm_adrs=" + frm_adrs + "&to_adrs=" + to_adrs + "&sub=" + sub + "&number=" + number  +"&zip=" + zip + "&message=" + message,
    success: function(data) {
        //...
    }

在Php页面

if (isset($_GET["frm_adrs"]))
{
    $frm_adrs = $_GET["frm_adrs"];
    $to_adrs = $_GET["to_adrs"];

现在的问题是AJAX无法找到“contact.php”..我没有开发任何插件,因此我需要添加静态网址来发送电子邮件而不是ajaxurl ..

提前致谢

2 个答案:

答案 0 :(得分:1)

首先,您已在jQuery代码中为文件“contact.php”指定了一个相对目录。这意味着您必须从URL中执行代码,该URL表示与contact.php的预期位置相同的目录。例如,在以下URL上执行代码会产生相应的影响;

<xsl:template match="qnap:li">

  <xsl:variable name="paraStyle" as="xs:string">
    <xsl:choose>
      <xsl:when test="parent::qnap:ol">AnswerNumbered</xsl:when>
      <xsl:otherwise>AnswerBullet</xsl:otherwise>
    </xsl:choose>
  </xsl:variable>
<xsl:choose>
  <xsl:when test="not(qnap:p)">
    <xsl:variable name="paraContent" as="element()">
      <span>
        <xsl:apply-templates/>
      </span>
    </xsl:variable>
  </xsl:when>
  <xsl:otherwise>
    <xsl:variable name="paraContent" as="element()">
      <span>
     <xsl:apply-templates select="qnap:p"/>
      </span>
    </xsl:variable>
  </xsl:otherwise>
</xsl:choose>

因此,您需要验证您的/wordpress/index.php => /wordpress/contact.php /wordpress/contact => /wordpress/contact/contact.php 文件是否与生成请求的文件位于同一目录中。

正如Jai在评论中指出的那样,你是在POST方法中通过jQuery AJAX发送数据,但你的php脚本正在预期(监听)GET方法。这将是有问题的,因为您的后端脚本不会解释您发送给它的数据。

如果您要将数据作为POST请求发送,那么您应该使用contact.php来检索它,否则如果您要将数据作为GET请求发送,请使用$_POST来检索它。您可以使用更加模糊的方法来使用$_GET检索数据,但这通常不是最好的处理方式。

您可能希望将encodeURIComponent用于使用非字母数字字符的某些字段(例如,您的消息变量),这将确保数据在您的前端和后端代码之间正确传输。

此外,您可能希望查看OWASP前10名列表,因为您的脚本容易受到CSRF攻击,并且可以用作电子邮件中继。检查here

最后,通常的做法是在数据表单上使用某种形式的CAPTCHA验证,不需要先前形式的机器人过滤/用户验证。这可以防止使用您的脚本作为中继的机器人发送恶意或垃圾邮件。

答案 1 :(得分:0)

试试这个.. subkeyword不能使用sub请使用sub1

  

for theame: - url:“echo get_template_directory_uri()”./ contact.php,

  页面模板的

: - url:“echo   get_template_directory_uri()” ./页面模板/ contact.php,

$.ajax({
  method: "POST",
  url: "<?php echo get_template_directory_uri() ?>/contact.php",
  data: { 
        frm_adrs : frm_adrs, 
        to_adrs:to_adrs,
        sub1:sub1,
        number:number,
        zip:zip,
        message:message
        }
})
  .done(function( msg ) {
    alert( "Data Saved: " + msg );
  });

在php页面

In page-template
require_once("../../../wp-load.php"); 

In Your theames root
require_once("../../wp-load.php"); 

if (isset($_REQUEST["frm_adrs"]))
{
    $frm_adrs = $_REQUEST["frm_adrs"];
    $to_adrs = $_REQUEST["to_adrs"];
}