在jQuery中触发Zend FlashMessenger

Mat*_*eno 8 php ajax jquery zend-framework

我正面临一个问题,我想知道是否有人可以指出我正确的方向.

我在我的控制器中使用Zend的FlashMessenger,但在我的一个文件中,我通过AJAX帖子处理我的表单.在这种情况下,我认为Humane-flatty将是Zend FlashMessenger的一个很好的替代品,但它的布局完全不同.

有没有办法在我的AJAX帖子中触发Zend Flashmessenger?

这就是我目前在控制器中调用Zend FlashMessenger的方式:

$this->_helper->FlashMessenger(array('success' => 'Succesfully added'));
Run Code Online (Sandbox Code Playgroud)

这是我的jQuery:

if (data.weight !== '' && data.customer != '') {
   $.ajax({
     type: 'POST',
     url: '/index/line',
     data: data,
     success: function(res) {
       $('#open_orders').append(res);
       flashSucces.log('Orderline succesfully added.');
       //Can I call Zend flashmessenger from here?
     }
   });
}
Run Code Online (Sandbox Code Playgroud)

Waq*_*ary 1

答案的秘诀在于您的视图脚本(*.phtml 文件)。

我假设以下index.phtml 文件作为indexController 文件的视图脚本,用于打印表单并执行Ajax。当您单击“获取外部内容”按钮时,/index/line 控制器的 Ajax 响应结果将填充到 div1 标记中。

    <!DOCTYPE html>
    <html>
    <head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    <script>
    $(document).ready(function(){
        $("button").click(function(){

            $.ajax({url: '/index/line', 
                success: function(res){
                $("#div1").html(res);
                //your FlashMessenger will execute from here with AJAX success.
            }
        });
        });
    });
    </script>
    </head>
    <body>
<?php // print your form from controller here. echo $this->form; ?>
    <div id="div1">Let jQuery AJAX Change This Text</div>
    <button>Get External Content</button>
    </body>
    </html>
Run Code Online (Sandbox Code Playgroud)

上面的代码将从indexController('/index/line')处的lineAction获取结果。在 IndexController.php 添加以下行

public function lineAction() 
            {
          $this->_helper->FlashMessenger('Succesfully added');

          if ($this->_helper->FlashMessenger->hasMessages()) 
          {$this->view->messages = $this->_helper->FlashMessenger->getMessages();}
            }
Run Code Online (Sandbox Code Playgroud)

现在调用线路操作的视图脚本 (line.phtml)。在 line.phtml 中添加以下行

<?php  
if ($this->messages!=Null)
            { $messages = $this->messages;
                foreach($messages as $message) {
                echo '<script> alert("'.$message.'") </script>';
             }
            }
Run Code Online (Sandbox Code Playgroud)

现在执行您的代码。您的 Ajax 将成功执行 Zend FlashMessenger 并显示 JavaScript 警报消息“已成功添加”。

我已经测试了上面的代码,它与 Zend 1.12 配合得很好。