Php jqueryajax返回html和json数据
我不确定是否有任何方法可以做到这一点,但如果有一个简单的解决方案,这将解决我的许多问题 我需要/希望能够在ajax请求成功时返回HTML和JSON。原因是,我希望请求一个文件并返回该页面的所有内容,但我也希望能够从该页面返回一组json格式的指定信息,以便我可以将其用于其他用途 这就是我现在正在做的:Php jqueryajax返回html和json数据,php,jquery,ajax,json,Php,Jquery,Ajax,Json,我不确定是否有任何方法可以做到这一点,但如果有一个简单的解决方案,这将解决我的许多问题 我需要/希望能够在ajax请求成功时返回HTML和JSON。原因是,我希望请求一个文件并返回该页面的所有内容,但我也希望能够从该页面返回一组json格式的指定信息,以便我可以将其用于其他用途 这就是我现在正在做的: $.ajax({ type: "POST", url: "inc/"+page+".php", data: "id="+encodeURIComponent(pa
$.ajax({
type: "POST",
url: "inc/"+page+".php",
data: "id="+encodeURIComponent(pageID),
success: function(html){
$("body > .container").html(html);
}
});
这就是我希望能够做到的:
$.ajax({
type: "POST",
url: "inc/"+page+".php",
data: "id="+encodeURIComponent(pageID),
success: function(html){
$("body > .container").html(html);
$("title").html(json.PageTitle)
}
});
在返回的页面上,我将指定我想要的标题。(例如,如果它是一个概要文件,我会返回用户名)尝试混合retun值以包含演示文稿和数据似乎有可能引起混淆。为什么不把它分成两个调用,在另一个调用成功时获取数据呢 比如:
$.ajax({
type: "POST",
url: "inc/"+view_page+".php",
data: "id="+encodeURIComponent(pageID),
success: function(html) {
$("body > .container").html(html);
$.ajax({
type: "POST",
url: "inc/"+data_page+".php",
data: "id="+encodeURIComponent(pageID),
success: function(json) {
$("title").html(json.PageTitle);
}
});
});
用JSON包装的HTML和数据
可以通过返回一个2元素的JSON数组来实现。
第一个元素包含HTML,第二个元素包含另一个JSON数组,其中包含数据。你只需要小心地打开它,不要弄坏任何东西
服务器端
$html = '<div>This is Html</div>';
$data = json_encode(array('page_title'=>'My Page'));
$response = array('html'=>$html, 'data'=>$data);
echo json_encode($response);
//Ajax success function...
success: function(serverResponse){
$("body > .container").html(serverResponse.html);
var data = JSON.parse(serverResponse.data);
$("title").html(data.page_title)
}
注1:我认为这就是@hakre在评论你的问题时的意思
注2:这种方法是有效的,但我同意@jheddings的观点,即避免混合表示和数据可能是一个好主意。编码业力会回来咬你。你可以使用自动编码的库,比如。使用
Phery::instance()->set(数组(
'加载'=>函数(){
/*装载$html和$json_数据*/
返回
PheryResponse::factory()
->json($json_数据)
->this()//指向容器
->html($html);
}
))->过程();
$(函数(){
var$container=$('body>.container');
$container.phery('make','load');//或$container.phery().make('load'))
$container.bind('phery:json',函数(事件、数据){
//在这里处理来自PHP的数据
});
$container.phery('remote');
});
您也可以使用phery.views
自动加载网站的一部分,而不必担心客户端特定的代码。在本例中,您必须在容器上放置一个唯一的ID,container
:
$(函数(){
费里视野({
“#容器”:{}
});
});
Phery::instance()->视图(数组(
“#容器”=>函数($data,$params){
/*在这里做负载部分*/
返回
PheryResponse::factory()
->渲染视图($html)
->jquery('.title')->text($title);
}
))->过程();
您还可以选择将数据包含在html5数据属性中
例如,如果您返回的是动物列表
<ul id="ZeAnimals" data-total-animals="500" data-page="2">
<li>Cat</li>
<li>Dog</li>
...
</ul>
有时,将请求分成两个不同的ajax调用也是有意义的。谢谢,是的,我知道,这是一种方法,将json放在我返回的页面上也是另一种方法,这实际上是我过去的做法,但我觉得这是一种混乱的方式,可能不是很好的方式,也许是唯一的办法。我正努力让一切尽可能好地配合在一起。我只是好奇这是否可能,因为我遇到了这个问题,这是一个很有趣的问题。。。我一直试图保持数据和显示的分离,即使可能以多个请求为代价。我的意思是,这个“问题”可能不是很多人都会遇到的,所以可能没有其他方法来解决这个问题,但是我创建的网站在处理数据等方面都有独特的设置。对其他人来说,这似乎根本不是问题,但对我来说,有一种方法可以做到这一点是绝对有意义的。是什么阻止了JSON和HTML字符串的出现?你是什么意思?你的意思是在HTML页面本身上有JSON吗?如果是的话,那我过去就是这样做的,但我真的不喜欢这样做。对我来说,这似乎在某种程度上是有问题的。如果有更好的方法,它会帮我解决很多问题,因为我经常遇到这个问题。只是为将来的读者编辑一下。客户端代码最后一行:
$(“title”).html(data.PageTitle)
应该是:$(“title”).html(data.page\u title)
Tx@FLOQDesign。固定的。
$('#ZeAnimals').data('total-animals')