Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] AJAX / jQuery - metoda kontrolera nie działa
Forum PHP.pl > Forum > PHP > Frameworki
Insert
Witam serdecznie,

Mam metodę kontrolera (http://localhost/module/controller/action), która odpala model i zwraca wynik zapytania w postaci JSON. Wszystko działa, jak odpalę to w przeglądarce jako zwykły url (http://localhost/module/controller/action), a kiedy chcę to dostać ajaksem - krzyczy, że zmienna obiektu klasy modelu nie jest obiektem. Próbowałem to zrobić omijając strukturę modułową - nic to nie dało, nadal nie daje rady załadować klasy modelu (a przy ręcznym odpaleniu adresu w przeglądarce działa jak należy). Z góry dziękuję za pomoc, poniżej niezbędne fragmenty kodu.

Oto, co zwraca firebug jako odpowiedź:
  1. <br />
  2. <b>Fatal error</b>: Call to a member function getAllBrands() on a non-object in <b>/home/x/application/modules/x/controllers/xController.php</b> on line <b>97</b><br />


Kod AJAX (jQuery):
  1. function getBrands(symbol)
  2. {
  3. var url = '/module/controller/action/symbol/' + symbol;
  4. var data = {};
  5. $.post(url,data,function(resp)
  6. {
  7.  
  8. },'json');
  9. }


Kod PHP akcji kontrolera (jak odpalę w przeglądarce odpowiedni adres - dostaję json z danymi - http://localhost/module/controller/action):
  1. $this->_helper->viewRenderer->setNoRender();
  2. $this->_helper->getHelper('layout')->disableLayout();
  3.  
  4. if(!$this->getRequest()->isXmlHttpRequest())
  5. //die('Ops... ajax request not found.');
  6.  
  7. $oVehicles = new Application_Model_Vehicles();
  8. $rows = $oVehicles->getAllBrands(); // to jest linia 97 pliku kontrolera
  9.  
  10. $result = array();
  11. if($rows)
  12. foreach($rows as $row)
  13. $result[$row->id] = $row->name;
  14.  
  15. header('Content-type: application/json');
  16. echo Zend_Json::encode($result);
melkorm
  1. if(!$this->getRequest()->isXmlHttpRequest())
  2. //die('Ops... ajax request not found.');
  3.  
  4. $oVehicles = new Application_Model_Vehicles();

Tak się kończy nie używanie nawiasów klamrowych dla if'ów.


I ogólnie to:
  1. $this->_helper->viewRenderer->setNoRender();
  2. $this->_helper->getHelper('layout')->disableLayout();
  3.  
  4. if(!$this->getRequest()->isXmlHttpRequest())
  5. //die('Ops... ajax request not found.');
  6. ...
  7. header('Content-type: application/json');
  8. echo Zend_Json::encode($result);

Można zastąpić jednym Action Helperem, a konkretnie AjaxSwitcher'em.

a to:
  1. if($rows)
  2. foreach($rows as $row)
  3. $result[$row->id] = $row->name;

Metodą fetchPairs.
Insert
Dzięki za uwagi, temat do zamknięcia.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.