更好的PHP与Json

更好的PHP与Json,php,html,json,zend-framework,Php,Html,Json,Zend Framework,您好,目前我在Zend php框架上有一个应用程序,我大量使用json从控制器获取数据。现在我不确定在javascript中将json数据解析为hmtl的方法是否正确。下面是我的示例代码 控制器: public function searchAction() { $search = $this->getRequest()->getParam('search'); $user = new Application_Model_User();

您好,目前我在Zend php框架上有一个应用程序,我大量使用json从控制器获取数据。现在我不确定在javascript中将json数据解析为hmtl的方法是否正确。下面是我的示例代码

控制器:

public function searchAction()
    {
        $search = $this->getRequest()->getParam('search');
        $user = new Application_Model_User();
        $userMapper = new Application_Model_Mapper_UserMapper();

        $usersearch = $userMapper->findByString($search);

        for($i=0; $i<count($usersearch); $i++)
        {
            $usersearch[$i]['pic'] = $this->view->getLoginUserImage($usersearch[$i]['social_id'],$usersearch[$i]['login_type'],null,null,square);
        }
          $this->_helper->json($usersearch);

    }
公共函数searchAction()
{
$search=$this->getRequest()->getParam('search');
$user=新应用程序\模型\用户();
$userMapper=新应用程序\模型\映射器\用户映射器();
$usersearch=$userMapper->findByString($search);
对于($i=0;$iview->getLoginUserImage($usersearch[$i]['social\u id'],$usersearch[$i]['login\u type'],null,null,square);
}
$this->\u helper->json($usersearch);
}
视图:member.phtml

<div class="container">
    <div class="clearfix page-header">
        <h1 class="heading">Member Search</h1>
    </div>

<div class="clearfix layout-block layout-a">
<div class="column column-alpha member-search-container">
                <div class="search-input-container clearfix">

            <form action="/member_search?query=" class="member-search-form" id="member-search-form" method="get" name="member_search_form" data-component-bound="true">

                        <fieldset>
                            <legend>Member Search</legend>
                            <label for="name_field">
                                <strong>    Name</strong>
                            </label>
                            <span class="formNote">
                                    (e.g. Bob Smith, Bob S.)
                            </span><br>
                            <input type="hidden" name="action_search" value="Search">
                            <input class="name-field" id="story-title" name="query" size="90" type="text" placeholder="search" autocomplete="off" style="width:220px;">
                            <div id="search-box"></div>
                            <div class="auto-name" style="display: none;"></div>
                        </fieldset>

</form>         


                </div>
                <div class="member-search-results">
                </div>

</div>

</div>

</div>
<script type="text/javascript">
$(document).ready(function(){

});



$('#story-title').keyup(function(e){
    var searchbox = $(this).val();

    if(searchbox == '')
    {
        $(".similar_story_block").hide();
    }else {

    $.ajax({
        url:"<?= $this->baseUrl('index/search')?>",
        data:{'search':$('#story-title').val()},
        dataType:"json",
        type:"POST",
        cache:false,
        success:function(data){
            if(data.length > 0)
            {
                        var divHtml = '<div class="similar_story_block" style="display: block;">'+
                        '<div class="head">'+
                        '<p>People</p>'+
                        '<a href="#" id="close-element-form" onclick="javascript:closeSearchBoxMember(event)"></a>'+
                        '</div>'+
                        '<ul>';

                       for(var count=0; count<data.length;count++)
                       {
                            if(data[count]['reviews_num'] != null )
                            {
                                 data[count]['reviews_num']
                            }
                            else 
                            {
                                data[count]['reviews_num'] = 0
                            }

                            divHtml+='<li>'+

                            '<a class="pushstate no-confirm" href="' + baseUrl + 'user/' + data[count]['user_unique_name'] + '">'+
                            '<div class="image">'+
                            '<img alt="" src="'+data[count]['pic']+'">'+
                            '</div>'+
                            '<div class="fleft col-400">'+
                            '<p>'+ data[count]['name'] +'</p>'+
                            '<span>'+data[count]['reviews_num']+' Reviews</span>'+
                            '</div>'+
                            '</a>'+
                            '</li>';                        
                       }
                        divHtml += '</ul></div>';
                        $("#search-box").html(divHtml);
                        $(".search-box").show();                        


            }
            else {
                         $("#search-box").html('');
                        $(".search-box").hide();
            }
        }
    }) }
});

    function closeSearchBox(event)
    {
        disabledEventPreventDefault(event);
        $(".similar_story_block").hide();
    }



</script>

成员搜索
成员搜索
名称
(如鲍勃·史密斯、鲍勃·斯密斯)

$(文档).ready(函数(){ }); $(“#故事标题”).keyup(函数(e){ var searchbox=$(this.val(); 如果(搜索框=“”) { $(“.similor_story_block”).hide(); }否则{ $.ajax({ url:“”, 数据:{'search':$('#故事标题').val(), 数据类型:“json”, 类型:“POST”, cache:false, 成功:功能(数据){ 如果(data.length>0) { var divHtml=''+ ''+ “人

”+ ''+ ''+ “
    ”;
    对于(var count=0;count,您可以通过PHP呈现模板并发送HTML,也可以发送JSON并使用JavaScript呈现模板

    我建议后者使用类似的方法

    定义HTML模板:

    <script id="member-template" type="text/x-handlebars-template">
      <p>Name: {{ name }}</p>
      <p>Role: {{ role }}</p>
    </script>
    
    使用JSON数据呈现我们的模板:

    var data = {"name": "Bob", "role": "Manager"};
    
    var template = Handlebars.compile($("#member-template").html());
    var html     = template(data);
    

    html
    变量将是编译后的html,您可以将其插入到
    分区中。

    我认为,如果您的项目有很多访问者并且此操作经常使用,您可以将此功能传递给他们。这可以减少服务器上的负载。但只有当您有很多访问者时,它才能工作(pageview).但是如果你的项目不是那么大,你就感觉不到差异和“PHP方式”在我看来可能更容易。

    您可以让它返回html视图而不是数据。这样控制器就可以获取视图并将数据解析到其中,然后将其回显到您的ajax回调中。是的,我该怎么做呢?我需要一个有效的代码示例。@zlippr:请不要使用“有效”这个词如果您甚至没有无效的解决方案。@zerkms,那么这意味着我的解决方案可以有效使用?至于上面关于
    好与坏的问题,这取决于您的优先级,将结果放在json上意味着传递的数据将是紧凑的(因此节省带宽)ie,你看到facebook如何管理它的订阅源了吗?另一方面,你会返回一个html,这比直接附加要简单得多。为什么你建议使用JS进行渲染?你依赖于客户端来正确解析它,并且假设用户启用了JS。顺便提一下,这是一个实际问题,不是试图批评你。我在这里这是一个风险,客户端将不会启用JS,但这将是一个难以置信的小用户数。原始海报询问如何通过JavaScript正确呈现JSON数据。是的。这是我的问题,如果可能的话,我想在controller中构建一个html和数据,并通过JSON呈现给用户查看。