1

这是我的第一篇文章,我并不是真正的开发人员(更像是一个热心的修补匠)。

我正在尝试根据从 MySQL 数据库中获取的信息在网站上创建一些旋转文本(可见项目每 10 秒左右用 JQuery 切换一次)。

目前,我在页面加载完成后应用旋转 JQuery 函数之前直接从 MySQL 结果创建 HTML。我遇到的问题是,预先创建/呈现 HTML 会减慢页面加载时间,而其他元素会在创建的 HTML 后面进行备份。

即使在加载文档之前没有运行 Javascript 也会发生这种情况(我也知道数据库查询需要几毫秒。)我已经通过强制查询返回 1 行、10 行、所有行来隔离问题等注意到每次更改都会导致页面加载时间变慢。

呈现的 HTML 看起来像这样:

<div id="container">
    <div class="item">
        <span class="field1">row 1 field 1</span>
        <span class="field2">row 1 field 2</span>
    </div>
    <div class="item">
        <span class="field1">row 2 field 1</span>
        <span class="field2">row 2 field 2</span>
    </div>
    <div class="item">
        <span class="field1">row 3 field 1</span>
        <span class="field2">row 3 field 2</span>
    </div>
    ...
</div>

我的解决方案(对替代建议感到高兴)是先渲染第一行,然后在页面加载后创建其余的行(旋转有 10 秒的延迟,这应该是足够的时间)。

这样做的另一个好处是,在 JQuery 元素开始旋转过程之前,附加内容不会使我的页面变得一团糟(我可以解决这个问题,但是两只鸟,一块石头等)

我在这个论坛上找到了一个从 MySQL 数据创建 JSON 数组的帖子:

<?php
$result=mysql_query("SELECT * FROM my_table");

$my_result_array=array();
while($row = mysql_fetch_array($result,MYSQL_ASSOC)){
    array_push($my_result_array,$row);
    }

$json_array = json_encode($my_result_array);
?>

在这一点上,我现在卡住了。我在这个论坛上找到了一些更有用的输入,用于在加载后创建必要的 HTML 对象:

var t = $.template('<div class="item"><span class="field1">${field1}</span><span class="field2">${field2}</span></div>');

$(selector).append( t , {
 dataPart1: jsonObj.field1,
 dataPart2: jsonObj.field2
});

我不清楚的一点(我对 Javascript 和 JSON 知之甚少)是我如何从我在 PHP 中创建的数组文本到最后一部分,它有一个可以迭代的对象。

非常感谢所有建议!

4

2 回答 2

2

你需要从 javascript 做一个 AJAX 帖子:

$.post('file.php', {},
      function(data) {
            //the data variable holds the json returned from PHP
            //parse it
        var jsonObj= $.parseJSON(data);
            //then use it like an object
            $(selector).append( t , {
            dataPart1: jsonObj.field1,
            dataPart2: jsonObj.field2
          });
});

服务器端您需要回显您的 json 变量:

文件.php

$my_result_array=array();
while($row = mysql_fetch_array($result,MYSQL_ASSOC)){
    array_push($my_result_array,$row);
    }

$json_array = json_encode($my_result_array);
echo $jsonArray;
?>
于 2012-10-19T14:11:25.053 回答
0

如果您想加快页面加载速度,您需要使用 AJAX 加载该数据。(请注意,这种方式的数据在页面加载时将不可用,因此在 AJAX 运行时会出现空白)。

于 2012-10-19T14:07:30.517 回答