【问题标题】:CakePHP 1.3: Processing an Email Form Using AjaxCakePHP 1.3:使用 Ajax 处理电子邮件表单
【发布时间】:2012-01-22 16:48:49
【问题描述】:

我正在开发一个应用程序,允许用户通过电子邮件发送他/她正在查看的文章。我正在使用 Ajax 来处理它。基本上,用户添加他/她的电子邮件/姓名和应该发送消息的人的电子邮件。我在将数据数组传递给我的 cakephp 函数时遇到问题。数据被准确地放置在数组中,但我在 CakePHP 函数中看不到它,特别是正在发送的电子邮件。

我的 Javascript 代码

 var dataString = new Array();
            dataString[0] = name;
            dataString[1] = email;

    // This will display Joe Schmoe, email@domain.com
    alert(dataString); return false;

        $('#contact-area').html("<div id='Sending' style='margin-left:410px;color:red;border:1px solid red'>Enviando...Por favor, aguarde um momento!</div>");


    $.ajax({
  type: "POST",
  url: "/articles/enviar",
  data: dataString,
  success: function() {
    $('#Sending').hide();
    $('#contact-area').html("<div id='message' style='margin-left:410px;color:red;border:1px solid red'></div>");
    $('#message').html("<h3>A Sua Mensagem Ja Foi Enviada!</h3>")
    .append("<p>Obrigado.</p>")
    .hide()

我的控制器操作

function enviar(){  
//debug($emailInfo);
        // Send email with new password
    $this->Email->to = 'xxxxxxx@yahoo.com';//testing without array
    $this->Email->subject = 'Hello';//$emailInfo['name'].' - Noticia Na Bravanews';
    $this->Email->from = 'xxxxxx@bravanews.com';//testing without array
$this->Email->sendAs = 'html';
$this->Email->template = 'enviar_email';
$this->Email->smtpOptions = array(
    'port'=>'465',
    'timeout'=>'30',
    'host' => 'ssl://smtp.gmail.com',
    'username'=>'xxxxx@gmail.com',
    'password'=>'xxxxxxxx'
);
$this->Email->delivery = 'smtp';


    // this displays as nothing
$this->set('emailInfo', $this->data);


if($this->Email->send()){
    return true;
}else{
    return false;
}
}

还有我的电子邮件模板

Hello,<br />
<?php e($emailInfo[0]); ?> sugeriu que leias a seguinte notícia na Bravanews.<br>
<?php e($emailInfo[1]); ?><br>
Por favor clique no link abaixo:<br /><br>
<?php debug($emailInfo); ?>

我该如何解决这个问题。我无法将任何内容转换为电子邮件模板,因此我可以打印或发送电子邮件...

【问题讨论】:

    标签: php jquery ajax email cakephp


    【解决方案1】:

    您必须在名为 data 的数组中发送变量,以便您可以在 $this->data 中找到它们。

    在 CakePHP 1.3 中,您不能使用 $this->set() 将参数传递给视图。对我来说,我基于 Email CakePHP 组件创建了自己的组件,以便将参数传递给视图。

           data : {'data[Model][email]' : email, 'data[Model][name]' : name},
    

    【讨论】:

    • 非常感谢。这正是我做错的。一切都很好,我能够在我的电子邮件模板中读取/显示表单数据。伟大的!我不必使用 [Model],但几乎相同的东西...data: {'data[email]' : email, 'data[name]' : name},
    【解决方案2】:

    浏览器发送的数据应该在 $this->data 中可用。不是这样吗?

    如果不是问题在于 Ajax 调用未发送数据。也许您没有使用 jquery 期望的布局。

    【讨论】:

      猜你喜欢
      • 2014-02-12
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 2011-11-12
      • 2011-03-09
      • 2012-05-23
      • 2015-08-10
      • 2015-05-20
      相关资源
      最近更新 更多