更好的PHP与Json
您好,目前我在Zend php框架上有一个应用程序,我大量使用json从控制器获取数据。现在我不确定在javascript中将json数据解析为hmtl的方法是否正确。下面是我的示例代码 控制器:更好的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();
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呈现给用户查看。