2013-04-17 22 views
9

das ist, was ich in meinem PHP-Datei haben:Convert Objekt der Klasse stdClass zu JSON-Objekt

$session = $m->session; 

$ session ist jetzt:

object(stdClass)[31] 
    public 'id' => string '21112' (length=5) 
    public 'external_id' => string '' (length=0) 
    public 'sessiongroupid' => string '1843' (length=4) 
    public 'eventid' => string '5588' (length=4) 
    public 'order' => string '0' (length=1) 
    public 'name' => string 'Ferdau Conference' (length=17) 
    public 'description' => string 'Ferdau Conference' (length=17) 
    public 'starttime' => string '2013-04-18 18:00:00' (length=19) 
    public 'endtime' => string '2013-04-18 18:04:00' (length=19) 
    public 'speaker' => string '' (length=0) 
    public 'location' => string 'Waregem' (length=7) 
    public 'mapid' => string '0' (length=1) 
    public 'xpos' => string '0.000000' (length=8) 
    public 'ypos' => string '0.000000' (length=8) 
    public 'maptype' => string 'plan' (length=4) 
    public 'imageurl' => string '' (length=0) 
    public 'presentation' => string '' (length=0) 
    public 'organizer' => string '0' (length=1) 
    public 'twitter' => string '' (length=0) 
    public 'allowAddToFavorites' => string '0' (length=1) 
    public 'allowAddToAgenda' => string '0' (length=1) 
    public 'votes' => string '0' (length=1) 
    public 'url' => string 'http://ferdau.be' (length=16) 
    public 'venueid' => string '0' (length=1) 

ich alle Informationen an eine Funktion senden möchten named speichern in meiner Javascript-Datei. Wie folgt:

echo '<a onclick="save('.$session.')" style="cursor:pointer;" class="metacell"> 
         <img src="'.buildUri("images/icons/favorite.png").'" width="16" /> 
         <span>Add to favorites</span> 
        </a>'; 

Wenn ich dies versuche, bekomme ich immer einen Fehler, dass nur eine Zeichenfolge gesendet werden kann. Wie kann ich dieses Objekt in etwas konvertieren, das ich an meine JavaScript-Funktion senden kann?

Ich habe schon versucht, diese ohne Ergebnis: $data = json_encode($session);

Als ich $data = json_encode((array)$session) tun

ich dieses:

<a class="metacell" style="cursor:pointer;" ferdau.be","venueid":"0"})"="" \="" 18:04:00","speaker":"","location":"waregem","mapid":"0","xpos":"0.000000","ypos":"0.000000","maptype":"plan","imageurl":"","presentation":"","organizer":"0","twitter":"","allowaddtofavorites":"0","allowaddtoagenda":"0","votes":"0","url":"http:\="" 18:00:00","endtime":"2013-04-18="" conference","starttime":"2013-04-18="" conference","description":"ferdau="" id":"21112","external_id":"","sessiongroupid":"1843","eventid":"5588","order":"0","name":"ferdau="" onclick="save({"> 
+1

'$ data = json_encode ((array) $ session)' –

+0

Mögliches Duplikat. http://stackoverflow.com/questions/4697656/using-json-encode-on-objects-in-php-regardless-of-scope – karmafunk

+0

In PHP> = 5.4.0 gibt es eine neue Schnittstelle für die Serialisierung von Objekten zu JSON: JsonSerializable – karmafunk

Antwort

20

$data = json_encode((array)$session); ist der richtige Weg zu gehen.

Ich vermute, dass die HTML, die Sie dort zeigen, ist, was Sie in Firebug/Chrome-Dev-Tools/IE-Dev-Tools sehen. So sieht es aus, nachdem der Browser versucht hat, es zu rendern. Sehen Sie sich die rohe Quelle an, um zu sehen, wie die Ausgabe tatsächlich aussieht. Ihr Problem wird an dieser Stelle durch die doppelten Anführungszeichen von json_encode verursacht, die bewirken, dass die Browser-Engine das Attribut onclick vor dem Ende der Werte von $data berücksichtigt.

Sie müssen eine Mischung aus ausgehenden doppelten Anführungszeichen und/oder einfachen Anführungszeichen im HTML-Code verwenden. Ich würde mit einfachen Anführungszeichen beginnen, da dies einfacher sein wird. Sie müssen aber auch sicherstellen, dass keiner der Werte in $data nicht verzahnte einfache Anführungszeichen enthält (da dies zum selben Problem führen würde).

+0

Und dann, wie kann ich die JSON-Werte in meinem JavaScript-Code lesen? – nielsv

+1

Siehe http://www.json.org/js.html. Insbesondere: Um einen JSON-Text in ein Objekt zu konvertieren, können Sie die Funktion eval() verwenden. eval() ruft den JavaScript-Compiler auf. Da JSON eine richtige Teilmenge von JavaScript ist, analysiert der Compiler den Text korrekt und erzeugt eine Objektstruktur. Der Text muss in Parens eingebettet werden, um zu vermeiden, dass eine Zweideutigkeit in der JavaScript-Syntax auftritt. var myObject = eval ('(' + myJSONtext + ')'); ' –