Zend Framework:超链接执行脚本而不离开网页?

时间:2012-02-21 21:56:42

标签: zend-framework

我正在使用Zend Framework来创建Web应用程序。 在某些页面中,我有一个链接,假设在单击时在服务器上执行脚本。我这样做是通过将此链接与动作控制器相关联。 我想要做的是当我点击链接时,动作控制器中的代码执行但没有离开我单击链接的原始页面

怎么做?

请帮助.....

2 个答案:

答案 0 :(得分:1)

您需要使用ajax,因为您希望在不离开页面的情况下执行操作:

例如,如果您使用的是jquery:

$("#myLink").click(function()
{
    $.ajax({
       type: "GET",
       url: "/my/action", //your action
       data: "item="+item, //a value that you might want to send to your action
       success: function(html, msg){
           //do something on success
       }
     }); 
});

答案 1 :(得分:1)

有很多方法可以在PHP中执行此操作,但您需要进行页面刷新。 这是我用来停留在同一页面上的一种方法$this->_redirect($this->getRequest()->getRequestUri());会将您带回到您发出请求的同一页面,但它会刷新页面。
_forward()允许您在同一请求中执行其他操作,因此它可能对您有用 您想要做的事情可以在没有ajax的情况下完成,但是您将忍受一定数量的页面刷新。

行动

 public function indexAction() {

        //get form and pass to view
        $form = new Admin_Form_Station();
        $form->setAction('/admin/index');
        $form->setName('setStation');

        $this->view->station = $this->_session->stationName;
        $this->view->stationComment = $this->_session->stationComment;
        $this->view->form = $form;

        try {
            //get form values from request object
            if ($this->getRequest()->isPost()) {

                if ($form->isValid($this->getRequest()->getPost())) {

                    $data = (object)$form->getValues();

                    //set session variable 'station'
                    $this->_session->station = $data->station;

                    //assign station name and comment to session
                    $station = new Application_Model_DbTable_Station();
                    $currentStation = $station->getStation($this->_session->station);
                    $this->_session->stationName    = $currentStation->station;
                    $this->_session->stationComment = $currentStation->comment;

                    //assign array() of stations to session namespace
                    $stations = $station->fetchAllStation();
                    $this->_session->stations = $stations;

                    //assign array() of bidlocations to session namespace
                    $bidLocation  = new Application_Model_DbTable_BidLocation();
                    $bidLocations = $bidLocation->fetchAllBidLocation($this->_stationId);
                    $this->_session->bidLocations = $bidLocations;

                    //display the same page with properties set
                    $this->_redirect($this->getRequest()->getRequestUri());
                }
            }
        } catch (Zend_Exception $e) {
            //assign error to flash messenger...TODO not for production
            $this->_helper->flashMessenger->addMessage($e->getMessage());
            //refresh the page and display message
            $this->_redirect($this->getRequest()->getRequestUri());
        }
    }

并在视图中

<?php if (!$this->station): ?>
    <div class="span-5 prepend-2">
        <?php echo $this->form ?>
    </div>
    <div class="span-10 prepend-2 last">
        <p style="font-size: 2em">Please select the Station you wish to perform Administration actions on.</p>
    </div>
<?php else: ?>
    <div class="span-19 last">
        <?php echo $this->render('_station.phtml') ?>
    </div>
<?php endif; ?>

我找到了一个似乎有用的解决方案。
在正常情况下使用视图中的链接,它会调用并执行操作。在您正在处理的操作中,重定向回您正在查看的页面。要考虑的一件事是任何临时数据都将丢失,因此保持(会话)您需要保留的任何临时数据的策略将非常重要。我通常经常使用Zend_Session_Namespace来保存数据。上面的代码示例是我如何持久保存所需数据的一个很好的例子 我已在自己的应用程序中对此进行了测试,只要数据仍然可用,页面就会刷新,内容或网址没有明显变化。