在文档中的PHP + Ajax之间加载数据时的最佳实践

时间:2013-12-13 16:22:18

标签: php html mysql ajax format

首先,这可能已经在SO上发布或重复了,但说实话,我找不到可能满足我的要求或澄清我的讨论的答案,也许我太累了,找不到它如果是这种情况,请将我链接到它,我将完全欣赏它。

我有一个自定义CMS用于我的公司,我多年来一直在修改和升级,最近我决定投入大量时间(我知道有很多框架和CMS在那里,但这段代码是由划伤,这是一个挑战所以这就是为什么)

假设我有一些带有某些数据的html,我想将这些数据插入到数据库的一个表中

在那部分,ajax做得很好

$.ajax({
   type: "POST",
   url: "requests/add-data.php",
   data: dataString,
   cache: false,
   success: function(data){
     /** Success response  or append data **/

   }
})

因此,在数据库中插入值后,我需要查询同一进程的一些其他信息,我需要为刚从数据库中提取的数据提供一种格式。 让我们以html格式举个例子。

<div>
 <ul>
  <li>
    <p>[title from x value on DB]</p>
     <span>[other values retrieved from the same Query]</span>
      <img src="[image retrieved]" />
  </li>
 </ul>
</div>

重点是文档中不存在HTML结构,我必须将它附加到文档上带有x id的div中。

通常我在PHP文件中构建HTML结构,我只是从ajax调用并附加了ajax成功的内容。

 $("#target-element").append(data);

无论如何,问题是,这是一个好的做法吗?

如果不是最好的方法是什么?在这种情况下,你们会提出什么建议?

提前感谢您的回答。

2 个答案:

答案 0 :(得分:3)

如果你的HTML不是静态的,你当然必须生成它。

我也更喜欢在客户端(Javascript)上这样做。

如果你使用jQuery,你可以这样做,例如:

var list = $('<ul/>').appendTo('#parentContainer');
for (var i = 0; i < n; i++) {
    list.append(
         '<li>' +
             '<p>' + '[title from x value on DB]' + '</p>' +
             '<span>' + '[other values retrieved from the same Query]' + '</span>' +
             '<img src="' + '[image retrieved]' + '" />' +
         '</li>'
    );
}

更新1 : 上面的代码应放在

 success: function(data) {
     /** Success response or append data **/
 }

访问数据取决于服务器脚本的响应的MIME类型;通常它是JSON;如果您未在ajax调用中指定dataType,则默认为“Intelligent Guess”(请参阅​​jquery ajax documentation中的“dataType”部分)。

但是,您可以从“data”参数访问检索到的值。 例如:

[image retrieved]可以是data.img_src ...

更新2 : 在服务器端,您可以返回资源(结果集),但必须返回实际数据。

以下是MySQL的一个示例,但它可以很容易地推广......):

<?php
    $resource = mysql_query("SELECT * FROM table WHERE id='$id'");
    $results = array();
    while($row = mysql_fetch_array($resource)) {
       $results[] = array(
          'title' => base64_decode($row['title']),
          'otherValue' => $row['otherValue'],
          'imgSrc' => $row['imgSrc']
       );
    }
    $json = json_encode($results);
    header('Content-Type: application/json');
    print $json;
?>

答案 1 :(得分:1)

这取决于您的编码习惯和做法。对我自己说,我喜欢将所有演示代码保存在Javascript / HTML和所有域代码(数据库查询等)的后端代码上(无论是Java,Scala,PHP ......)。

因此,对于您的示例,我将查询PHP以获取JSON对象并在Javascript代码中构建HTML。这样,您可以随时将后端重新用于未来的移动应用程序。

我可以引用一些关于分离关注的非常好的文章来支持我的实践,但是这一切都取决于开发人员。如果您不打算将后端代码重新用于其他前端,请坚持使用您感觉更舒服的练习。

供参考:http://en.wikipedia.org/wiki/Separation_of_concerns

希望能帮助您进一步阅读:)