login  Naam:   Wachtwoord: 
Registreer je!
 Forum

JSON uitlezen?

Offline roy - 25/09/2008 19:41 (laatste wijziging 25/09/2008 20:00)
Avatar van royPHP gevorderde BEste,


Ik wil Json uitlezen.
Dat doe ik met een each.

Dit is de code, het lukt me maar niet om het twee niveau's diep uit telezen.

json:
  1. [{"id":"1","title":"content","active":"true","items":[{"id":"1","cms_menu_id":"1","title":"page"},
  2. {"id":"2","cms_menu_id":"1","title":"nieuwsberichten"}]},
  3.  
  4. {"id":"2","title":"extra","active":"true","items"
  5. :[{"id":"3","cms_menu_id":"2","title":"mediatheek"}]}]


Dit is het javascript:

  1. $.each(menu, function(i, item){
  2. alert(i);
  3. alert(item.title);
  4. if(typeof item.items == "object") {
  5. $.each(item.items, function(j, subitem){
  6. alert(j);
  7. alert(subitem.title);
  8. });
  9. }
  10. });



items is het tweede object in het object..
Weet iemand wat ik verkeert doe?

Roy

9 antwoorden

Gesponsorde links
Offline BramBo - 26/09/2008 11:46 (laatste wijziging 26/09/2008 11:48)
Avatar van BramBo JS gevorderde bij de $.each functie van jQuery zit je in de scope van het object, heb code niet geprobeerd maar heeft item.title de juiste value ??

Anyway zoiets zou het moeten worden (on-getest):
  1. $.each(menu, function(i) {
  2. item = this;
  3. if((new String(typeof(item.items))) == "object") {
  4. sub_items = item.items;
  5. $.each(sub_items, function(j) {
  6. sub_item = this;
  7. alert(sub_item.title);
  8. });
  9. }
  10. });


edit: wel in 't Nederlands....
Offline roy - 26/09/2008 12:19
Avatar van roy PHP gevorderde ok, dankje..

Wie kan me uitleggen hoe $.toJSON werkt?
Dit is wat ik eruit wil hebben:
{"class":"configuration","method":"hear","arguments":["2",{"language_id":"0","language":"nl","title":"titel"}]}

arguments is dan weer een nieuw object.

Hoe gaat het in javascript eruit zien wat ik in de $.toJSON functie moet stoppen?
Offline BramBo - 26/09/2008 12:26
Avatar van BramBo JS gevorderde Hoe zou je het opgebouwd willen hebben, JSON is eigenlijk gewoon een js-object, wat er nu staat is :

je haalt de JSON op op object x dan krijg je:

Object {
x.class = "configuration"
x.method = "hear"
x.arguments = Array {
2 => Object {language_id = "nl"; title = "titel"}
}
}

dus zou je alle argumenten willen hebben uit het object:
  1. var x;
  2. $.getJSON('url', function(x) {
  3. $.each(x.arguments, function() {
  4. alert(this);
  5. });
  6. });
Offline roy - 26/09/2008 12:29
Avatar van roy PHP gevorderde maar class en method, zijn de namen die gegenereerd worden als er op een knop gedrukt wordt. de argumenten zijn de post waarden.

hoe zet ik die namen dan in json? het wordt gegeneerd als een string..

Bovendien haal ik geen JSON op, maar wil ik het sturen naar de server.
Offline BramBo - 26/09/2008 13:05
Avatar van BramBo JS gevorderde Je kunt in js dynamisch een object bouwen (een van de hoogst gewaardeerde functionaliteiten in JS, iig door mij )

dus:
  1. item_obj = new Object();
  2. item_obj.class = "Class naam";
  3. item_obj.method = "methode";
  4. item_obj.items = new Array();
  5. for(var i=0;i<5;i++) {
  6. item_obj.items[i] = new Object();
  7. item_obj.items[i].title = "Item "+i;
  8. }


En dan gewoon posten met $.post :
  1. $.post(url, item_obj);

Offline roy - 26/09/2008 21:05
Avatar van roy PHP gevorderde En deze kan je dan weer uitlezen in php? met de decode functie?
Offline BramBo - 27/09/2008 15:52
Avatar van BramBo JS gevorderde http://www.json.org Kortom, ja.
Offline roy - 27/09/2008 22:11 (laatste wijziging 28/09/2008 19:15)
Avatar van roy PHP gevorderde ik heb nu dit:
  1. function getAjaxRequest(type, classname, method, arguments){
  2.  
  3.  
  4. item_obj = new Object();
  5. item_obj.classname = "Class naam";
  6. item_obj.method = "methode";
  7. item_obj.items = new Array();
  8. for(var i=0;i<5;i++) {
  9. item_obj.items[i] = new Object();
  10. item_obj.items[i].title = "Item "+i;
  11. }
  12.  
  13.  
  14. $.post("../../include/service.php", item_obj,
  15.  
  16.  
  17. function(data){});}



Maar dit is geen JSON wat er wordt gepost..

zoiets moet er in de post komen te staan:
{"classname":"Menu","method":"getMenu","arguments":["48",false,0,50]}

en dit is wat ik zie in de post:
classname Class+naam
items [object+Object]
items [object+Object]
items [object+Object]
items [object+Object]
items [object+Object]
method methode

Hoe kan ik dat veranderen??


Offline BramBo - 28/09/2008 23:16 (laatste wijziging 28/09/2008 23:23)
Avatar van BramBo JS gevorderde my bad 
het is inderdaad zo dat post het verkeerde dataType selecteert, je dient de meer low level functie van jQuery te gebruiken $.ajax.

iets in de trant van:
  1. $.ajax(
  2. { type:”POST”,
  3. url : "../../include/service.php",
  4. data : item_obj,
  5. dataType: "json"
  6. }
  7. );


voor alle properties van $.ajax zie : jQuery Doc

Edit: aangepast zodat 't jou code reflecteert.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.186s