используя jquery для публикации данных в Zend Framework - PullRequest
1 голос
/ 13 декабря 2011

Если вы проверите это, у меня есть небольшая проблема со следующим, у меня есть форма (webbooks.phtml), в которой я использую функцию jQuery

http://pastebin.com/7Pbd43fC -веббуки.phtml (на самом деле это меню и фактически представление, где вы вводите искомый продукт)

http://pastebin.com/q8RJWdb7 -webbookscontroller (это контроллер, который использует API для получения данныхиз базы данных SQL на основе строки / числа ... и т. д., заданных webbooks.phtml)

http://pastebin.com/vuy9GUvP -index.phtml (это пространство представления, где должен быть результатпросмотр.)

Это массив, который я получаю:

{"book_title":"Bioethics in the 21st Century",
"id":"1424",
"isbn":"978-953-307-270-8","
unix_name":"bioethics-in-the-21st-century",
"visible_online":"1"} 

Я могу видеть этот массив, когда я

die((json_encode)$result);

, и я хочу, чтобы этот массив попал вмой взгляд (index.phtml)?Я новичок в PHP, и я пытаюсь сделать что-то, что может быть плохой практикой и вполне может быть невозможным.Я просто собираю что-то вместе, чтобы проверить свои знания и посмотреть, что может сделать PHP.Это возможно?

Ответы [ 2 ]

3 голосов
/ 13 декабря 2011

Это пример базового использования вызова Zend Controller с помощью ajax / json и получения ответа на тот же phtml, так что вы можете использовать его в своем коде.

В файле .phtml у меня есть javascript, который вызывает (в IndexController) действие ajaxAction ():

<script language = "Javascript">
var param1 = 'first';  //or get value from some DOM element
var param2 = 'second'; //or get value from some DOM element

jQuery.ajax({
      url: '/default/index/ajax',
      type: 'POST',
      data: {param1: param1, param2:param2 },
      dataType: "json",
      success: function(result){
            var return1 = result.return1;
            var return2 = result.return2;
            // return1 and return2 is value from php file.
            // fill out DOM element or do the windows.location()
      }
});
</script>

В IndexController ajaxAction () должен получить запрос:

public function ajaxAction(){
    $this->view->layout()->disableLayout();
    $this->_helper->viewRenderer->setNoRender(true);

    $param1 = $this->_request->getParam('param1');
    $param2 = $this->_request->getParam('param2');

    // DO THE OTHER STUFF AND LOGIC HERE

    $results = array(
        'return1' => 'value1',
        'return2' => 'value2'
    );

    $this->_response->setBody(json_encode($results));
}

В любом случае я предлагаю прослушать @jakenoble и посмотреть (изучить) переключение контекста в Zend.

1 голос
/ 13 декабря 2011

Если результатом вашего клиентского вызова является просто перенаправление на другую страницу, то почему бы не сделать все это на одном контроллере / action / viewscript, как показано ниже:

  1. Создайте формуотправьте запрос GET, а не POST
  2. Отправьте форму обратно на ту же страницу, выполните удаленный вызов API и обработайте результаты.

Даже если вы хотите это сделатьв двух действиях - одно для отображения формы, другое для отображения результатов - я не вижу, какое значение вы получаете от вызова AJAX.

Я пропустил какое-то другое требование?

Делая это с текущей структурой, вам нужно будет сохранить результаты удаленного вызова API в сеансе, а затем извлечь его после перенаправления.Выполнимо, но мне кажется ненужным, если это можно сделать одним действием.

...