2013-04-17 13 views
9

to co mam w pliku php:Konwersja obiektu klasy stdClass do JSON Object

$session = $m->session; 

$ sesja jest teraz:

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) 

Chcę wysłać wszystkie informacje do funkcji o nazwie zapisać w moim pliku javascript. W ten sposób:

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>'; 

Kiedy próbuję tego, zawsze otrzymuję komunikat o błędzie, że tylko ciąg może zostać wysłany. Jak mogę przekonwertować ten obiekt na coś, co mogę wysłać do funkcji javascript?

Próbowałem to bez skutku: $data = json_encode($session);

Kiedy zrobić $data = json_encode((array)$session)

uzyskać to:

<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 ((tablica) $ sesja)' –

+0

Możliwy duplikat. http://stackoverflow.com/questions/4697656/using-json-encode-on-objects-in-php-regardless-of-scope – karmafunk

+0

W PHP> = 5.4.0 istnieje nowy interfejs do serializacji obiektów do JSON: JsonSerializable – karmafunk

Odpowiedz

20

$data = json_encode((array)$session); jest właściwa droga.

Zgaduję, że wyświetlany tam html jest tym, co widać w firebug/chrome dev tools/IE dev tools. Tak to wygląda, gdy przeglądarka próbuje go wyrenderować. Spróbuj spojrzeć na surowe źródło, aby zobaczyć, jak faktycznie wygląda wydruk. Twój problem w tym miejscu jest spowodowany podwójnymi cytatami z json_encode powodującymi, że silnik przeglądarki bierze pod uwagę atrybut onclick zamknięty przed końcem wartości z $data.

Będziesz musiał wykonać kilka kombinacji podwójnych cudzysłowów i/lub użyć pojedynczych cudzysłowów w kodzie HTML. Zacznę od pojedynczych cudzysłowów, bo to będzie prostsze. Ale musisz również upewnić się, że żadna z wartości w $data nie zawiera ucichniętych pojedynczych cudzysłowów (ponieważ spowodowałoby to ten sam problem).

+0

A następnie, jak mogę odczytać wartości json w moim kodzie javascript? – nielsv

+1

Zobacz http://www.json.org/js.html. W szczególności: 'Aby przekonwertować tekst JSON na obiekt, można użyć funkcji eval(). eval() wywołuje kompilator JavaScript. Ponieważ JSON jest prawidłowym podzbiorem JavaScript, kompilator poprawnie przeanalizuje tekst i stworzy strukturę obiektu. Tekst musi być zawijany w pareny, aby uniknąć potykania się o niejasności w składni JavaScript. var myObject = eval ('(' + myJSONtext + ')'); ' –