Если вы проверите это, у меня есть небольшая проблема со следующим: у меня есть форма (webbooks.phtml), в которой я использую функцию jQuery
http://pastebin.com/7Pbd43fC -webbooks.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. Это возможно?
Это пример базового использования вызова 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 и посмотреть (узнать) Context Switching в Zend.
Если результат вашего клиентского вызова – это просто перенаправление на другую страницу, то почему бы не сделать все это на одном контроллере / action / viewscript, как показано ниже:
Даже если вы хотите сделать это в двух действиях – один для отображения формы, другой – для отображения результатов – я не вижу, какое значение вы получаете от вызова AJAX.
Я пропустил какое-то другое требование?
Выполняя это с текущей структурой, вам нужно будет сохранить результаты удаленного вызова API в сеансе, а затем получить его после перенаправления. Do-able, но мне кажется ненужным, если это можно сделать в одном действии.