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


Best practice when loading data between PHP + Ajax in the document

首先,这可能已经在SO上发布或复制了,但老实说,我找不到满足我的要求或澄清我的困惑的答案,也许我太累了,找不到它,如果是这样的话,请将我链接到它,我会非常感激的。

我为我的公司定制了一个CMS,多年来我一直在修改和升级,最近我决定花很多时间(我知道有很多框架和CMS,但这个代码是从头开始的,这是一个挑战,所以这就是为什么)

假设我有一些包含某些数据的html,并且我想将这些数据插入DB 中的一个表中

在这一部分,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中。

通常,我在刚刚从ajax调用的PHP文件中构建HTML结构,并在ajax成功的情况下附加该内容。

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

不管怎样,问题是,这是不是一个好的做法?

如果没有,最好的方法是什么?在这种情况下你们有什么建议?

提前感谢您的回答。

如果您的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文档中的"dataType"部分)。

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

CCD_ 1可以是例如CCD_。。。

更新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;
?>

这取决于您的编码习惯和实践。就我自己而言,我喜欢将所有的表示代码都保存在Javascript/HTML中,并将所有的域代码(数据库查询等)保存在后端代码上(无论是Java、Scala、PHP…)

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

我可以引用一些关于关注点分离的非常好的文章来支持我的实践,但这一切都取决于开发人员。如果你不打算用另一个前端重用你的后端代码,那就坚持你觉得更舒服的做法。

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

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