Zend Framework: гиперссылка для выполнения скрипта, не покидая веб-страницу? - PullRequest
0 голосов
/ 22 февраля 2012

Я использую Zend Framework для создания веб-приложения.На некоторых страницах у меня есть ссылка, которая предполагает выполнение скрипта на сервере при нажатии.Я делаю это, связывая эту ссылку с контроллером действий.То, что я хочу сделать, это когда я нажимаю на ссылку, код в контроллере действий выполняется, но не покидая исходную страницу, с которой я щелкнул ссылку

Как это сделать?

Пожалуйста, помогите.....

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

есть способы сделать это в 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 для сохранения данных. Пример кода выше - хороший пример того, как я сохраняю нужные мне данные.
Я проверил это в своем собственном приложении, и пока данные остаются доступными, страница обновляется без каких-либо заметных изменений в содержании или URL.

1 голос
/ 22 февраля 2012

вам нужно использовать 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
       }
     }); 
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...