Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF][Dojo] Iteracja po obiekcie Zend_Json (lub czystym json)
Forum PHP.pl > Forum > PHP > Frameworki
Sajrox
Witam,

Postanowiłerm się przekoanć się do Dojo ale jak na razie idzie to cięzko. Odrazu muszę przyznać że dokumentacja jest dośc uboga jak dla początkującego uzytkownika Dojo.

A więc do rzeczy. Chciałbym przy pomocy Dojo wyświetlić po kolei wszystkie elementy w obiekcie typu Zend_Json lub czystego obiektu JSON.

W jQuery użyłbym each jednak tutaj nie mogę znaleśc rozwiązania sad.gif

Kod który używam:
Widok:
  1. <script language="javascript">
  2. function getRegions(id)
  3. {
  4. dojo.require('dojo.rpc.JsonService');
  5.  
  6. var url = '<?=$this->baseUrl()?>/pl/default/rpc/service';
  7. var myObject = new dojo.rpc.JsonService(url);
  8.  
  9. // uzycie
  10. var result = myObject.GetRegionsByCountry(id);
  11. result.addCallback(
  12. function(res){
  13.  
  14. //??
  15.  
  16. }
  17. );
  18. }


Klasa przekazująca obiekt Zend_Json:
  1. class RpcController extends Zend_Controller_Action {
  2.  
  3. function init() {
  4. $this->_helper->layout()->disableLayout();
  5. $this->_helper->viewRenderer->setNoRender(true);
  6. $this->_setParam('ajax', true);
  7. }
  8.  
  9. function serviceAction() {
  10.  
  11. $server = new Zend_Json_Server();
  12. $server->setClass('Rpc_Get');
  13. $server->setAutoEmitResponse(true);
  14.  
  15. if ('GET' == $_SERVER['REQUEST_METHOD']) {
  16. $server->setTransport('POST');
  17.  
  18. $server->setTarget($this->getHelper('url')->url(array('controller'=>'rpc', 'action'=>'service')));
  19. $server->setId($this->getHelper('url')->url(array('controller'=>'rpc', 'action'=>'service')));
  20.  
  21. $server->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2);
  22.  
  23. $smd = $server->getServiceMap();
  24. $smd->setDojoCompatible(true);
  25. header('Content-Type: application/json');
  26.  
  27. echo Zend_Json::encode($smd);
  28. return;
  29.  
  30. } else {
  31. //$this->view->response = $server->handle();
  32. $server->handle();
  33. }
  34. }
  35. }
seth-kk
for in?
Sajrox
No własnie nie idzie:

Na wyjściu otrzymuje taki oto obiekt JSON (zmienna "res"):
  1. {"data":[{"id":1,"countries_id":1,"name":"Wielkopolskie"},{"id":2,"countries_id":1,"name":"Lubuskie"}]}



Probuje wykonać:
// @res to nasz powyższy JSON
  1. for (var key in res.data) {
  2. alert(res.data[key].id);
  3. }



To też nie działa (odczytuje po kolei każdy znak ciągu JSON):
  1. for (var key in res) {
  2. alert('test');
  3. }


No własnie nie idzie:

Na wyjściu otrzymuje taki oto obiekt JSON (zmienna "res"):
  1. {"data":[{"id":1,"countries_id":1,"name":"Wielkopolskie"},{"id":2,"countries_id":1,"name":"Lubuskie"}]}



Probuje wykonać:
// @res to nasz powyższy JSON
  1. for (var key in res.data) {
  2. alert(res.data[key].id);
  3. }



To też nie działa (odczytuje po kolei każdy znak ciągu JSON):
  1. for (var key in res) {
  2. alert('test');
  3. }


Kod
  1. alert(res.data)

Zwraca undefined :/

No własnie nie idzie:

Na wyjściu otrzymuje taki oto obiekt JSON (zmienna "res"):
  1. {"data":[{"id":1,"countries_id":1,"name":"Wielkopolskie"},{"id":2,"countries_id":1,"name":"Lubuskie"}]}



Probuje wykonać:
// @res to nasz powyższy JSON
  1. for (var key in res.data) {
  2. alert(res.data[key].id);
  3. }



To też nie działa (odczytuje po kolei każdy znak ciągu JSON):
  1. for (var key in res) {
  2. alert('test');
  3. }


Kod
  1. alert(res.data)

Zwraca undefined :/
antyqjon
Nie znam Dojo, ale jesteś pewien że argument callbacka jest obiektem, a nie stringiem? Sprawdź przez typeof i jeśli się okaże że to string, to użyj eval().
Sajrox
Zadziałalo coś takiego:
  1. var data = dojo.fromJson(res);
  2.  
  3. for (var key in data) {
  4. // kod
  5. }


Więc chodziło o dojo.fromJson()
smile.gif
seth-kk
Cytat(Sajrox @ 15.12.2009, 22:56:30 ) *
Więc chodziło o dojo.fromJson()
smile.gif

wiec dlaczego pytales iteracje a nie parsowanie? tongue.gif
Sajrox
Chodziło mi po prostu o pobranie każdego kolejnego elementu więc nazwałem to iteracją. Jeśli się pomyliłem to przepraszam smile.gif
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.