JSON uitlezen?
roy - 25/09/2008 19:41 (laatste wijziging 25/09/2008 20:00)
PHP 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:
[{"id":"1","title":"content","active":"true","items":[{"id":"1","cms_menu_id":"1","title":"page"},
{"id":"2","cms_menu_id":"1","title":"nieuwsberichten"}]},
{"id":"2","title":"extra","active":"true","items"
:[{"id":"3","cms_menu_id":"2","title":"mediatheek"}]}]
[{"id":"1","title":"content","active":"true","items":[{"id":"1","cms_menu_id":"1","title":"page"},
{"id":"2","cms_menu_id":"1","title":"nieuwsberichten"}]},
{"id":"2","title":"extra","active":"true","items"
:[{"id":"3","cms_menu_id":"2","title":"mediatheek"}]}]
Dit is het javascript:
$.each(menu, function(i, item){
alert(i);
alert(item.title);
if(typeof item.items == "object") {
$.each(item.items, function(j, subitem){
alert(j);
alert(subitem.title);
});
}
});
$.each ( menu, function ( i, item ) {
alert ( i) ;
alert ( item .title ) ;
if ( typeof item .items == "object" ) {
$.each ( item .items , function ( j, subitem) {
alert ( j) ;
alert ( subitem.title ) ;
} ) ;
}
} ) ;
items is het tweede object in het object..
Weet iemand wat ik verkeert doe?
Roy
9 antwoorden
Gesponsorde links
BramBo - 26/09/2008 11:46 (laatste wijziging 26/09/2008 11:48)
JS gevorderde
bij de $.each functie van jQuery zit je in de scope van het object, heb code niet geprobeerd maar heef t item.title de juiste value ??
Anyway zoiets zou het moeten worden (on-getest ):
$.each(menu, function(i) {
item = this;
if((new String(typeof(item.items))) == "object") {
sub_items = item.items;
$.each(sub_items, function(j) {
sub_item = this;
alert(sub_item.title);
});
}
});
$.each ( menu, function ( i) {
item = this ;
if ( ( new String( typeof ( item .items ) ) ) == "object" ) {
sub_items = item .items ;
$.each ( sub_items, function ( j) {
sub_item = this ;
alert ( sub_item.title ) ;
} ) ;
}
} ) ;
edit: wel in 't Nederlands....
roy - 26/09/2008 12:19
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?
BramBo - 26/09/2008 12:26
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:
var x;
$.getJSON('url', function(x) {
$.each(x.arguments, function() {
alert(this);
});
});
var x;
$.getJSON ( 'url' , function ( x) {
$.each ( x.arguments , function ( ) {
alert ( this ) ;
} ) ;
} ) ;
roy - 26/09/2008 12:29
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.
BramBo - 26/09/2008 13:05
JS gevorderde
Je kunt in js dynamisch een object bouwen (een van de hoogst gewaardeerde functionaliteiten in JS, iig door mij )
dus:
item_obj = new Object();
item_obj.class = "Class naam";
item_obj.method = "methode";
item_obj.items = new Array();
for(var i=0;i<5;i++) {
item_obj.items[i] = new Object();
item_obj.items[i].title = "Item "+i;
}
item_obj = new Object( ) ;
item_obj.class = "Class naam" ;
item_obj.method = "methode" ;
item_obj.items = new Array( ) ;
for ( var i= 0 ; i< 5 ; i++ ) {
item_obj.items [ i] = new Object( ) ;
item_obj.items [ i] .title = "Item " + i;
}
En dan gewoon posten met $.post :
roy - 26/09/2008 21:05
PHP gevorderde
En deze kan je dan weer uitlezen in php? met de decode functie?
roy - 27/09/2008 22:11 (laatste wijziging 28/09/2008 19:15)
PHP gevorderde
ik heb nu dit:
function getAjaxRequest(type, classname, method, arguments){
item_obj = new Object();
item_obj.classname = "Class naam";
item_obj.method = "methode";
item_obj.items = new Array();
for(var i=0;i<5;i++) {
item_obj.items[i] = new Object();
item_obj.items[i].title = "Item "+i;
}
$.post("../../include/service.php", item_obj,
function(data){});}
function getAjaxRequest( type, classname, method, arguments) {
item_obj = new Object( ) ;
item_obj.classname = "Class naam" ;
item_obj.method = "methode" ;
item_obj.items = new Array( ) ;
for ( var i= 0 ; i< 5 ; i++ ) {
item_obj.items [ i] = new Object( ) ;
item_obj.items [ i] .title = "Item " + i;
}
$.post ( "../../include/service.php" , item_obj,
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??
BramBo - 28/09/2008 23:16 (laatste wijziging 28/09/2008 23:23)
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:
$.ajax(
{ type:”POST”,
url : "../../include/service.php",
data : item_obj,
dataType: "json"
}
);
$.ajax (
{ type: ”POST”,
url : "../../include/service.php" ,
data : item_obj,
dataType: "json"
}
) ;
voor alle properties van $.ajax zie : jQuery Doc
Edit: aangepast zodat 't jou code reflecteert.
Gesponsorde links
Dit onderwerp is gesloten .