Json-Variablen in PHP ansprechen.

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Json-Variablen in PHP ansprechen.

    Hi leute, hab mir schon einiges zum Thema JSOn
    in combination mit PHP durchgelesen,
    weiß soweit über unterscheide zwischen PHP 4 und
    Version größer 5.2 bescheid aber irgentwie steh ich
    trotzdem bisschen auf dem Schlauch.
    Ich hab ein sehr schönes Codeschnipselchen für ein
    Ajax-Bilderalbum entdeckt. Die Php-dateien hierzu
    muss ich mir allerdings selber coden und hier bei hab
    ich das Problem, dass ich einfach keinen Weg finde,
    die in Javascript erzeugten JSON-Werte in PHP anzusprechen.

    Hier mal zur Anschauung die wichtigsten Funktionen
    aus meinem Javascript:

    Code:
    var JSONService = Class.create ({
    	initialize: function(definition) {
    		this.mod = definition.mod;
    
    		var methods = definition.methods;
    		
    		var i;
    		
    		for (i=0; i < methods.length; ++i ) {
    			var name = methods[i].name+"";
    			var argc;
    
    			if ( methods[i].parameters ) {
    				argc = methods[i].parameters.length;
    			} else {
    				argc = 0;
    			}
    this[name] = new Function ('return new 
    
    InvokeCall("'+this.mod+'","'+name+'",'+argc+',arguments);');
    		}
    	}
    });
    
    
    var InvokeCall = Class.create ({
    	initialize: function(mod, method, argc, params) {
    		if ( argc != params.length ) {
    			alert("Falsche Anzahl an Parametern bei Call " + method + " in Modul " + mod);
    			return;
    		}		
    
    		this.mod = mod;
    		this.method = method;
    		
    		// Array kopieren - clone() funktioniert bei den 
    		// built-in parameters array nicht
    		var i;
    		this.params=[];
    		for ( i=0; i < params.length; ++i ) {
    			this.params[i] = params[i];
    		}
    
    	
    	},
    	
    	call: function () {
    		var config = {
    			mod: this.mod,
    			method: this.method,
    			params: this.params
    		};
    		
    		new Ajax.Request(
    			"ajax.php", {
    			method: "post",
    			postBody: Object.toJSON(config),
    			onSuccess: this.onSuccess.bind(this),
    			onFailure: this.onFailure.bind(this)
    		});	
    	},
    	
    	onSuccess: function (response) {
    		var responseObj = eval("("+response.responseText+")");
    		this.callback.call({},responseObj.ret);
    	},
    	
    	onFailure: function ( response ) {
    		alert("fehler")
    	},
    	
    	setCallback: function ( callback, context ) {
    		if ( context != null ) {
    			this.callback=callback.bind(context);	
    		} else {
    			this.callback = callback;
    		}
    		return this;
    	},
    	
    	setErrorCallback: function ( callback ) {
    		this.errorCallback = callback;
    		return this;
    	}
    });
    Dieser Teil ruft die oben beschriebene Funktion JSONService auf:
    Code:
    var EditUserGalerieService = new JSONService (
    	{
    		mod: "usergalerie",
    		methods: 
    			[
    				{
    					name: "get_pictures",
    					parameters:
    						[
    							"user_album_id"
    						]
    				},
    				{
    					name: "sort",
    					parameters:
    						[
    							"user_album_id",
    							"order"
    						]
    				}
    			]
    	}
    );
    loadalbum ruft die oben genannte Funktion
    EditUserGalerieService auf. Genau an dieser Stelle
    liegt mein Problem. Die hier erzeugten JSON-Werte
    möchte in meiner ajax.php ansprechen und nach
    Verarbeitung an loadAlbumCallback zurückgeben.
    Allerdings weiß ich nicht wie. Meine ajax.php folgt weiter unten.
    Code:
    loadAlbum: function (user_album_id) {
            this.showWaitScreen("Lade Bilderalbum");
    		   EditUserGalerieService.get_pictures(user_album_id).setCallback(
    this.loadAlbumCallback,this).call();
    }
    	
    loadAlbumCallback: function (pictures) {
    	var i;
    		
    	var html = "";
    	var template = new Template(
    	'<div id="pic_#{user_galerie_id}" class="picture">blabla</div>'
    	);
    		
    	for (i=0; i < pictures.length; ++i ) {
    		html+=template.evaluate(pictures[i]);
    	}
    		
    		
    	if ( pictures.length == 0 ) {
    		$('useralbum_images').innerHTML = "<br />In dem Album befinden sich noch keine Bilder.";
    	} else {	
    		$('useralbum_images').innerHTML = html;
    	}
    
    	this.hideWaitScreen ();
    	this.showToolbar ();
    }
    Hier meine ajax.php:

    PHP-Code:
    // So wird mit PHP 5.2 JSON zu PHP 
    $test1 '{"mod": "usergalerie", "method": "get_pictures", "params": ["175546"]}';
    $test json_decode($test1);
    var_dump($test);

    //Was in $test1 steht hätte ich jetzt aber gerne dynamisch vom Javascript
    //Aber wie?
    $_GET["mod"]  // fehlanzeige
    $_POST["mod"// fehlanzeige
    $_REQUEST["mod"//fehlanzeige 
    Wenn mir jemand weiterhelfen könnte wär ich echt sehr verbunden.
    Such mich jetzt schon seit tagen durch Tutorials und Foren, aber ich finde einfach
    keine Lösung.
    Zuletzt geändert von deschmiddi; 05.01.2008, 17:38.
    Geht net gibts net...

  • #2
    Also bezüglich meines Problems bin ich dann doch noch fündig geworden.
    Hab mir mal im netz die json.php runtergeladen und darin war folgendes als hilfe zu finden:

    * // create a new instance of Services_JSON
    * $json = new Services_JSON();
    *
    * // convert a complexe value to JSON notation, and send it to the browser
    * $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
    * $output = $json->encode($value);
    *
    * print($output);
    * // prints: ["foo","bar",[1,2,"baz"],[3,[4]]]
    *
    * // accept incoming POST data, assumed to be in JSON notation
    * $input = file_get_contents('php://input', 1000000);
    * $value = $json->decode($input);

    accept incoming POST data war genau das was ich gesucht habe.
    Für alle diejenigen die PHP > 5.2 verwenden und JSON somit schaon standardmäßig vorhanden ist heist es natürlich dann:

    PHP-Code:
    $value json_decode($input); 
    Allerdings hab ich jetzt noch ein kleines Problem: beim mir sieht $value so aus:
    PHP-Code:
    $value = {"mod""usergalerie""method""get_pictures""params": ["175546"]}; 
    wie komme ich jetzt an die einzelnen Werte usergalerie, get_pictures und an die 175546 ran?
    Geht net gibts net...

    Kommentar


    • #3
      Nach erneutem suchen hab ich auch das nun rausbekommen:
      Zugriff auf die einzelnen Werte erfolgt so:

      PHP-Code:
      echo $value->mod//liefert usergalerie 
      vielleicht ist es ja für andere hilfreich.
      Schönen abend noch.
      Geht net gibts net...

      Kommentar

      Lädt...
      X