Javascript / PHP - 使用PHP从服务器检索数据并使用Javascript生成/重新排列它是否是个好主意?

时间:2015-06-21 20:56:26

标签: javascript php jquery

前提

在开发网站时,我遇到了一个问题,该问题与使用 Javascript PHP 组建网页有关。我决定问这个问题,因为我不知道用什么样的术语来找到答案(如果有的话,我对此表示怀疑)。

背景 - 我有什么

小背景可能会帮助您理解我提出这个问题的原因。

我正在制作一份人员名单。管理员基本上会有一个WYSIWYG(所见即所得)编辑器,他可以在其中输入有关每个人的信息。请注意,所有这些人及其所有信息都显示在同一网页上,您没有为每个人创建单独的页面。

每个人都从 PHP 中的 MySQL 数据库中检索并在页面上生成。属性(电子邮件,地址,姓名,角色,银行帐户等)的数量有些重要。

通过单击页面上的添加新人按钮,可以将新人添加到人员列表中(此功能在Javascript中使用JQuery实现)。通过 AJAX 可以保存对人的更改,而无需重定向到单独的页面。

解决问题

现在,引擎盖下(即源代码中)存在实际问题。我提到了如何使用PHP生成人员列表,这很好。但是,因为我想使用Javascript将一个人添加到列表中,所以我必须重复大部分相同的代码,尽管有一点点变化,就像在PHP中一样。我利用追加 -method JQuery提供的方法将人员添加到人员列表中。它看起来像这样:

$('#vsrk_henkiloLaatikko_nappulaUusiHenkilo').click(function(){
    $('#vsrk_henkiloLaatikot').append(
        "<div class='vsrk_henkiloLaatikko'>"+
            "<div class='vsrk_henkiloLaatikko_kuva'>"+
                "<img src='media/img/tuntematon.png' alt='Ei kuvaa'/>"+
            "</div>"+
            "<div class='vsrk_henkiloLaatikko_tiedot'>"+
                "<h2 class='vsrk_kenttaEditoitava' contenteditable='true'>Etunimi Sukunimi</h2>"+
                "<h3 class='vsrk_kenttaEditoitava' contenteditable='true'>Henkilön rooli</h3>"+
                "<p class='vsrk_kenttaEditoitava' contenteditable='true'></p>"+
                "<div></div>"+
                "<p><b>Henkilötunnus:</b></p>"+
                "<p class='vsrk_kenttaEditoitava' contenteditable='true' style='min-height:28px'></p>"+
                "<p><b>Osoite:</b></p>"+
                "<p class='vsrk_kenttaEditoitava' contenteditable='true' style='min-height:28px'></p>"+
                "<p><b>Puhelinnumero:</b></p>"+
                "<p class='vsrk_kenttaEditoitava' contenteditable='true' style='min-height:28px'></p>"+
                "<p><b>Sähköposti:</b></p>"+
                "<p class='vsrk_kenttaEditoitava' contenteditable='true' style='min-height:28px'></p>"+
                "<p><b>Tilinumero:</b></p>"+
                "<p class='vsrk_kenttaEditoitava' contenteditable='true' style='min-height:28px'></p>"+
                "<p><b>Seurakunta:</b></p>"+
                "<select class='vsrk_henkiloLaatikko_valintaSeurakunta vsrk_yleinen_syoteNormaali' style='width:100%'>"+
                    <?php
                        foreach($GLOBALS["paikat"] as $paikka){
                            echo
"                               \"<option>" . $paikka . "</option>\"+\n";
                        }
                    ?>
                "</select>"+
                "<div>"+
                    "<p>Käyttäjätunnus:</p>"+
                    "<input class='vsrk_yleinen_syoteNormaali' type='text' placeholder='Ei käyttäjätunnusta' style='width:100%'/>"+
                    "<p>Näkyvyys:</p>"+
                    "<select class='vsrk_yleinen_syoteNormaali vsrk_henkiloLaatikko_valintaNakyvyys' style='width:100%'>"+
                    "<option selected='selected'>Näkyvissä</option>"+
                    "<option>Piilotettu</option>"+
                    "</select>"+
                "</div>"+
                "<div>"+
                    "<input class='vsrk_yleinen_nappulaNormaali vsrk_yleinen_nappulaPurppura vsrk_henkiloLaatikko_nappulaPoistaHenkilo' style='margin:2px 0 2px 0; width:100%' type='button' value='Poista tämä henkilö' />"+
                    "<input class='vsrk_yleinen_nappulaNormaali vsrk_yleinen_nappulaPurppura vsrk_henkiloLaatikko_nappulaTallennaHenkilo' style='margin:2px 0 2px 0; width:100%' type='button' value='Tallenna henkilötiedot'/>"+
                "</div>"+
            "</div>"+
        "</div>"
    );
});

问题是现在我必须维护Javascript和PHP以包含相同的信息。这种双重工作可能有点刺激,特别是如果你必须使用两种不同的语言来完成这项工作。

考虑解决方案

现在,有些懒惰,但也“合理”,我开始想到一个解决方案:如果我可以从PHP中的数据库收集信息到一些有用的形式,使用Javascript获取数据然后使用Javascript客户端使用我的追加 -method(或其他类似的东西)生成实际人员列表。这意味着一旦我编辑了这个“append-method”,我不仅可以在页面加载后生成人员列表,还可以使用相同的方法将新人添加到列表中。没有额外的重复,并且修改人员所包含的信息类型会变得更容易。

现在,最终的问题......

......这是个好主意吗?另外,你会推荐什么样的存储形式,以便Javascript可以“重新排列”使用PHP检索的数据,如果这是一个好主意?

1 个答案:

答案 0 :(得分:3)

简短的回答是肯定的。

答案很长,你所谈论的内容实际上是将你的观点与模型分开。当您这样做时,您不需要使用相同的编程语言来检索和组织数据并呈现它。

通常会说&#34;有用的形式&#34;你指的是为了组织数据并使其可用,Javascript将是XML或JSon。因为JSon基于Javascript,所以我倾向于使用它。

除了JQuery之外,还有一些正在使用的Javascript框架,例如AngularJS和Ember。它们用于相同的目的,但专门设计为前端流体编程语言。较大的公司往往倾向于使用这些语言,并且它们往往可以很好地扩展。

无论您使用什么来呈现数据,关键是它必须适用于您的项目。 JQuery甚至vanilla Javascript都可以完成简单的工作,例如解析JSon,当你分离项目层时,你将能够更好地利用正确的工具来完成工作,而不是一直坚持使用PHP。