如何使用json通过ajax发送php对象?

如何使用json通过ajax发送php对象?,php,jquery,ajax,json,Php,Jquery,Ajax,Json,我有以下ajax代码: $.ajax({ type: 'post', url: '/conversation/test', data: { conversation: JSON.stringify(<?php echo json_encode($conversation) ?>) }, success: function (respo

我有以下ajax代码:

            $.ajax({
                type: 'post',
                url: '/conversation/test',
                data: { conversation: JSON.stringify(<?php echo json_encode($conversation) ?>) },
                success: function (response) {
                    console.log(response);
                }
            });
$.ajax({
键入:“post”,
url:“/conversation/test”,
数据:{conversation:JSON.stringify()},
成功:功能(响应){
控制台日志(响应);
}
});
现在,我在test.php上有:

<?php

    $conversation = json_decode($_POST['conversation']);


 ?>

<?php foreach ($conversation->getUsers() as $conUser) {
    // Skip current user
    if ($conUser->getId() == UserSession::getUserId()) {
       continue;
    } ?>
    <a href="/<?php echo $conUser->getUri(); ?>/"><?php echo $conUser->getName(); ?></a>
<?php } ?>

我在控制台上的回答是:

<br />
<b>Fatal error</b>:  Call to undefined method stdClass::getUsers() in     <b>/Users/msalamanca/PhpStorm/pinporn/trunk/application/views/default/conversation/test.php</b> on line <b>8</b><br />

致命错误:在第8行的/Users/msalamanca/PhpStorm/pinpern/trunk/application/views/default/conversation/test.php中调用未定义的方法stdClass::getUsers()

我不明白我在这里做错了什么

我终于明白我做错了什么。因此,在我看来,我做了以下几点:

    <div id="messages-widget">

    </div>

    <!--  Updates the conversation display and check for new messages  -->
    <script>
        $(document).ready(function () {

            $.post( "/conversation/messages", { conId: <?php echo $conversation->getId(); ?> })
                 .done(function (data) {
                      $('#messages-widget').html(data);
            });


        });

    </script>
    public function messages($args=array()) {

        $conId = $args['conId'];

        // Get current conversation
        $conversation = ConversationModel::getConversationById($conId);

        DataHolder::getInstance()->addObject('conversation', $conversation);
    }

这样,我的视图将拥有我想要的对话对象及其属性。这样做,我就可以使用我需要的getter和setter了。

$conversation
刚刚解码了传递给ajax的JSON
json_decode
仅用于将json字符串转换为数组-请查看。如果要使用getter
getUsers()
,则需要使用属性和getter/setter实现一些类。您不能在数组上使用getter。@Cockootec技术上,默认情况下,
json\u decode
返回一个对象,并且只有在您使用第二个参数显式告诉它时才返回数组。话虽如此,你的帖子的观点是正确的。PHP无法知道JSON应该被转换成具有特定方法的类。因此,您的意思是我可以取回该对象?这里的
$conversation
的值是什么
echo JSON\u encode($conversation)
?你到底想实现什么?json是用于数据的。它不是一个通用的序列化系统。您不能传递实际的对象,json字符串将只解码到PHPThat中的stdClass对象(或数组),看起来更好!您可能需要注意的一件事是检查是否允许实际用户查看所请求的转换。是的,我刚刚从答案中删除了一堆代码,只是为了表明想法:)