Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.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 用动态内容填充页面的最佳方法_Php_Jquery - Fatal编程技术网

Php 用动态内容填充页面的最佳方法

Php 用动态内容填充页面的最佳方法,php,jquery,Php,Jquery,我已经思考了一段时间了,在一个示例中,假设我们有index.php,它有一大堆内容和一个搜索框,当用户向搜索框输入数据时,下面会显示结果,例如每个结果的图像和数据 填充这些结果的最佳方法是什么 示例一 AJAX Post to results.php,它响应完整的结果,包括 HTML和美学标签。然后回到第一页,包括 使用.html(data)返回的所有数据 示例二 拥有结果的框架并隐藏它们 div和每个结果包含的所有内容) 然后AJAX和检索数据,填充div并显示它们 或者您可能有任何其他建议?

我已经思考了一段时间了,在一个示例中,假设我们有index.php,它有一大堆内容和一个搜索框,当用户向搜索框输入数据时,下面会显示结果,例如每个结果的图像和数据

填充这些结果的最佳方法是什么

示例一

AJAX Post to results.php,它响应完整的结果,包括 HTML和美学标签。然后回到第一页,包括 使用.html(data)返回的所有数据

示例二

拥有结果的框架并隐藏它们 div和每个结果包含的所有内容) 然后AJAX和检索数据,填充div并显示它们


或者您可能有任何其他建议?

如果结构没有改变,最好使用JSON并在本地JavaScript中填充

假设有一套书。大约100。如果要输出要更新的HTML,肯定要花很多钱。同时,您可以输出如下内容:

{
    success:true,
    rows:[{
        "id":"1",
        "title":"Office Space",
        "director":"Mike Judge",
        "released":"1999-02-19",
        "genre":"1",
        "tagline":"Work Sucks",
        "coverthumb":"84m.jpg",
        "price":"19.95",
        "available":"1"
    },{
        "id":"3",
        "title":"Super Troopers",
        "director":"Jay Chandrasekhar",
        "released":"2002-02-15",
        "genre":"1",
        "tagline":"Altered State Police",
        "coverthumb":"42m.jpg",
        "price":"14.95",
        "available":"1"
    },{
        "id":"4",
        "title":"American Beauty",
        "director":"Sam Mendes",
        "released":"1999-10-01",
        "genre":"2",
        "tagline":"... Look Closer",
        "coverthumb":"12m.jpg",
        "price":"19.95",
        "available":"1"
    },{
        "id":"5",
        "title":"The Big Lebowski",
        "director":"Joel Coen",
        "released":"1998-03-06",
        "genre":"1",
        "tagline":"The \"Dude\"",
        "coverthumb":"49m.jpg",
        "price":"21.90",
        "available":"1"
    },{
        "id":"6",
        "title":"Fight Club",
        "director":"David Fincher",
        "released":"1999-10-15",
        "genre":"3",
        "tagline":"How much can you know about yourself...",
        "coverthumb":"94m.jpg",
        "price":"19.95",
        "available":"1"
    }]
}

jQuery.parseJSON可以很好地解析这一点,并显示为
li
s或complex
div
s。

这实际上取决于当前页面结构和接收数据的结构对您来说更容易些什么。这两种方法都很好,尽管我可能倾向于第一种方法,因为它更易于使用,并且可以在PHP文件中格式化输出(如果需要的话)。。。然而,唯一的区别基本上是AJAX接收的数据量,在当今的互联网速度下,与内容一起使用几个HTML标记不会有太大的区别

  • 用户在搜索词中输入
  • 执行AJAX GET to results.php
  • 以JSON格式从results.php返回数据
  • 用所述数据替换搜索结果

  • 第二个选项比IMHO好得多,使用JSON获取数据,并担心在检索数据后将其插入客户端。这样想:发送/接收的数据越少越好。 这里有两点

    • 如果您只是传递JSON,并且您的视图必须在以后更改,那么代码更易于维护
    • 对于开发人员来说,代码的可读性更高,如果他们只是传递JSON,他们可以更轻松地解决数据问题,而不必经历大量的布局HTML结构

    两者都有可能,但在大多数情况下,选择完整的html答案(选项1)会更好。 如果你有一个动态php页面,你应该使用一个模板引擎

    我通常会得到多个模板:一个带有页面结构的主模板、一个菜单模板、一个文章模板。。。在您的例子中,是结果模板

    然后,您可以使用或不使用ajax发出搜索请求。如果启用js,您只需使用“结果”模板呈现结果;返回html片段,并将其插入到页面的指定位置

    如果js被分解,则请求一个新页面,该页面将在新页面中呈现结果


    您也可以使用js模板引擎,但到目前为止,我还没有找到一个能够在PHP和js中实现的

    JSON是最好的选择,因为它发送的数据要少得多。一个直接来自Jquery文档的示例显示,您不需要为数据生成框架。正如您所看到的,您只需要创建一个容器来保存从javascript创建的元素<代码> $.getJSON(“http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", { 标签:“雷尼尔山”, tagmode:“任何”, 格式:“json” }, 功能(数据){ $.each(data.items,function(i,item){ $("
    这在index.php中

    <!DOCTYPE html>
    <html>
    <head>
        <style>img{ height: 100px; float: left; }</style>
        <script src="http://code.jquery.com/jquery-latest.js"></script>
    </head>
    <body>
    <div id="images">
    
    </div>
    <script>
        $.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?",
            {
                tags: "mount rainier",
                tagmode: "any",
                format: "json"
            },
            function(data) {
                $.each(data.items, function(i,item){
                    $("<img/>").attr("src", item.media.m).appendTo("#images");
                    if ( i == 3 ) return false;
                });
            });</script>
    
    </body>
    </html>
    
    这就是result.php的外观

    $('#search').live('click',function(){
      $.ajax({
        url: 'result.php',
        data: {keyword: $('#search_box').val()},
        type: 'POST',
        dataTupe: 'json',
        success: function(response){
          $('.result_box').html(response['data']);      
        }
      });
    });
    
    getResults函数应该是根据关键字搜索检索数据的地方


    希望这有帮助。

    但是如果我在页面上有20个结果的骨架,但是隐藏了,如果只返回了6个结果,我会显示一堆空骨架?我假设每个数据的骨架都是相同的,所以你应该只有一个,然后从Ajax得到的结果会重复,所以我有keleton在jquery中?或者隐藏在页面上?您可以选择其中之一。将骨架放在页面上,这在我看来更合适,然后是.clone()它,或者你可以创建DOM元素。但是我会使用HTMLI中的隐藏框架,在设计上花费大量时间,每个结果都有多个标记,这不仅仅是一个图像标记,这会是一个问题吗?当然不是,这是一个非常基本的示例。有很多关于stackoverflow的示例,几乎完全符合你的需要。
    $keyword = $_POST['keyword'];    
    $result = getResults($keyword);    
    die(json_encode(array('data'=>$result)));