凌乱的Jquery + HTML + PHP

时间:2013-01-11 01:00:50

标签: php javascript jquery html

我一直在审查我的代码,试图整理它,我只是厌倦了当我需要从页面复制html时编写jQuery的方式。这就是我的意思:

我有一个页面的一部分循环通过像论坛这样的帖子(我的实际代码更重html):

<? foreach ($posts as $post): ?>
    <div class="post">
        <div class"post_details">
            <a href="<?= $post->link ?>"><?= $post->title ?></a>
            <br>
            <?= $post->timestamp ?>
        </div>
    </div>
<? endforeach ?>

然后在我的jquery中,我基本上必须复制这个HTML来循环遍历AJAX请求的结果以获取更多近期帖子:

for (i = 0; i < response.length; i++) {
    post = respnse[i];

    html = '<div class="post">';
        html += '<div class"post_details">';
            html += '<a href="' + post.link + '">' + post.title + '</a>';
            html += '<br>';
            html += post.timestamp;
        html += '</div>';
    html += '</div>';
}
// Inject html into page

$(".feed").prepend(html);

如果我改变PHP循环遍历对象的HTML布局,那么我还必须更改jQuery中的HTML。然后我最终得到了许多基本上重复的代码,这些代码就像任何东西一样变得混乱。

有没有办法更好地将jQuery链接到HTML元素以使代码更简洁?

2 个答案:

答案 0 :(得分:2)

你的方法很疯狂......

html = '<div class="post">';
    html += '<div class"post_details">';
        html += '<a href="' + post.link + '">' + post.title + '</a>';
        html += '<br>';
        html += post.timestamp;
    html += '</div>';
html += '</div>';

为什么用JavaScript?为什么不让PHP返回完全格式化的字符串,然后只使用jQuery将其放入其位置?只需在xml字符串中返回它并将其解压缩。

更好的是,让AJAX请求返回运行该确切代码的View(如果您使用的是MVC框架)。将代码放在一个地方,部分视图或其他东西,并创建一个指向AJAX的链接。我的0.02美元。

答案 1 :(得分:1)

您应该使用服务器端模板 - &gt;客户端模板。该方法很简单,导致您在大多数情况下仅修改维护中的服务器端模板。

步骤1.定义服务器端功能或块

<?php
 function postTemplate($post) { ?>
 <div class="post">
    <div class"post_details">
        <a href="<?= $post->link ?>"><?= $post->title ?></a>
        <br>
        <?= $post->timestamp ?>
    </div>
 </div>
<? } ?>

步骤2.将其输出到页面以进行客户端模板化(使用特定的客户端语法,无论客户端选择什么,即Mustache)

<script type="html/template" id="postTemplate">
<?php
  $obj = new stdClass;
  $obj->link = "{link}";
  $obj->title = "{title}";
  $obj->timestamp = "{timestamp}";
  echo postTemplate($obj);
 ?>
 </script>

步骤3.使用您最喜欢的客户端模板策略

<script>
    // refer to http://mustache.github.com/
    // but I prefer EJS myself
</script>