-4

我想整理我的 index.php。我有一些脚本要移动到另一个文件。

atm 我来了,我有 javascript,其中包含 php 来回显数据库中的值。我找到了解决方案,将其复制到另一个 php 文件,如 script.php,然后将其包含在 php 中。

<!-- AUTO complete -->
<script src="/pages/JQuery/js/jquery-1.8.3.js"></script>
<script src="/pages/JQuery/js/jquery-ui-1.9.2.custom.js"></script>
<link rel="stylesheet" type="text/css" href="/pages/JQuery/css/no-theme/jquery-ui-1.10.3.custom.css" />
<?php include './pages/skripti/autocomplete.php'; //pats skripts ?> 

<script>
    jQuery(function($) {
        var availableTags = [
        <?php 
            $names = $db->query("SELECT * FROM names");
            while ($name = $names->fetch_object()) {
                echo '"' . $name->rs_name . '",';
            }
        ?>
        ];

        $( "#autocomplete" ).autocomplete({
            source: availableTags
        });
    });
</script>

问题是:它的解决方案有多好?

4

1 回答 1

2

就个人而言,我觉得将应该缓存在客户端的 JavaScript 和 PHP 结合起来是不好的做法。将来,它会更难维护,客户端更慢,因为每次页面加载都必须下载它,并导致更多的 http 请求(或更大的单个 http 请求)。

<?php
$names = $db->query("SELECT rs_name FROM names");
$list = array();
while($name = $names->fetch_object()) {
  $list[] = $name->rs_name;
}
?>
<script type="text/javascript" src="js/mscript.js"></script>
<script>
// Now, let's initialize our functions on jQuery load
jQuery(function($) {
  auto_complete(<?php echo json_encode($list); ?>);
});
</script>

然后,mscript.js 将包含:

var auto_complete = (function(auto_list) {
  $( "#autocomplete" ).autocomplete({
     source: auto_list
  });
});

在 mscript.js 中添加额外的函数或类。然后客户端只需下载一次,而不是每次页面加载。

在这个例子中,它似乎并不适用,但是当你将来添加不同的 JS 功能时,它会使代码更加便携和易于使用。

编辑:作为旁注,我相信某些版本的 IE,在数组尾随方面存在问题。json_encode 可以为您处理这些问题,并且还会为您转义值(例如,如果您有一个带有 rs_name 的 rs_name "

于 2013-05-25T16:00:51.490 回答