Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php jqueryajax返回html和json数据_Php_Jquery_Ajax_Json - Fatal编程技术网

Php jqueryajax返回html和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请求成功时返回HTML和JSON。原因是,我希望请求一个文件并返回该页面的所有内容,但我也希望能够从该页面返回一组json格式的指定信息,以便我可以将其用于其他用途

这就是我现在正在做的:

     $.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')