2013-04-17 200 views
9

这是我在我的PHP文件:转换对象

$session = $m->session; 

$会话现在是:

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) 

我想所有的信息发送给一个函数命名保存在我的JavaScript文件。像这样:

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

当我尝试这个时,我总是得到一个错误,只有一个字符串可以发送。我怎样才能将这个对象转换为我可以发送给我的JavaScript函数的东西?

我已经试过这没有结果:$data = json_encode($session);

当我做$data = json_encode((array)$session)

我得到这个:

<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

可能的重复。 http://stackoverflow.com/questions/4697656/using-json-encode-on-objects-in-php-regardless-of-scope – karmafunk

+0

在PHP> = 5.4.0中有一个用于将对象序列化为JSON的新接口: JsonSerializable – karmafunk

回答

20

$data = json_encode((array)$session);是正确的道路要走。

我猜你在那里显示的HTML是你在firebug/chrome开发工具/ IE开发工具中看到的。这是浏览器尝试渲染后的样子。尝试查看原始来源以查看输出实际的外观。此时,您的问题是由json_encode引起的双引号导致浏览器引擎在$data的值结束之前关闭onclick属性。

您需要做一些混合的转义双引号和/或在HTML中使用单引号。我会从单引号开始,因为这会更简单。但是,您还必须确保$data中的值中没有包含未转义的单引号(因为这会导致相同的问题)。

+0

然后我怎样才能读取我的JavaScript代码中的json值? – nielsv

+1

请参阅http://www.json.org/js.html。特别是:'要将JSON文本转换为对象,可以使用eval()函数。 eval()调用JavaScript编译器。由于JSON是JavaScript的一个真正的子集,因此编译器将正确地解析文本并生成对象结构。文本必须包装在parens中以避免跳出JavaScript语法中的歧义。 var myObject = eval('('+ myJSONtext +')');' –