ajax站点加载动态php内容的良好实践


Good practice for ajax site loading with dynamic php content

我有点忙。我有一个项目,相当动态的内容,所以它写在php。根据用户输入,加载不同的文件。到目前为止没有问题,但我也想使用ajax (jquery)来加载内容(如果用户有js上),这就是我卡住了一点。

我的php网站结构是这样的:

switch ($input) {
    case 'foo': require 'foo.php';
    break;
    case 'bar': require 'bar.php';
    break;
}

和在实际内容区域的一些函数,如

<div id="content"><php echo content_function(); ?></div>
<div id="sidebar"><php echo sidebar_function(); ?></div>

这些函数都在bar.php和foo.php中定义。这样,我就不必在html中间与不同的switch/if-else语句作斗争,整个文件处理都在switch语句中完成。

当用jquery加载时,现在我显然不能在内容和侧边栏中重新实例化函数,而不重新加载页面,这会使ajax加载无用。因此,我在foo.php和bar.php中添加了一些额外的代码,以便能够将每个函数分别实例化到适当的div中(在事先清空它们之后)。例如

if(isset($_POST) && $_POST['load_content_func']) { echo content_function(); }
if(isset($_POST) && $_POST['load_sidebar_func']) { echo sidebar_function(); }

然后我将每个ajax请求的输出加载到内容和侧边栏中:

var foo_or_bar; //depending on user input either foo or bar
if (foo_or_bar == 'foo') {
    $.ajax({  
      type: "POST",  
      url: "foo.php",  
      data: load_content_func,  
      success: function(html) {  
        $('#content').html(html);
    $.ajax({  
      type: "POST",  
      url: "foo.php",  
      data: load_sidebar_func,  
      success: function(html) {  
        $('#content').html(html);
}

注意:所有的代码只是一个例子,写出来的我的头,没有关系,如果有什么问题,只要你得到我想要做的想法!

这感觉不太对,但是作为一个奇怪的完美主义者,我从来没有真正快乐过,所以这可能只是我。有一个很好的做法做这样的事情,你通常如何解决这个问题?欢迎提出建议!

事情是这样的,我希望它不会因为它是一个笼统的回应而加重,并且提出的问题多于答案:

你建议的方法是,根据用户交互,有可能加载新内容,当新内容加载时,也会加载一个新的侧边栏。对此,我有一些想法,并警告:我不是世界上最有经验的PHP开发人员。话虽如此,以下是我最初的想法(它们之间并不完全相关):

A)人们使用Ajax的原因各不相同:最小化正在检索的数据,避免重新加载整个页面的视觉"闪光",我相信还有其他原因。要决定Ajax是否适合这项工作,您需要决定"为什么"使用它。

B)如果你总是检索"foo"的侧边栏去"foo"的内容,为什么不一次取回他们?无论你的PHP逻辑在服务器端是什么,它都可以返回一个请求:

<div id="content">.. all my content...</div>
<div id="sidebar">.. my sidebar ...</div>

很少有结构良好的页面会有任何标记将内容与侧边栏分开。你的可能是其中之一;我不确定。

C)如果你总是检索"foo"的侧边栏去"foo"的内容,你不能返回有序的标记(如上所述),你仍然可以只要求foo.php一次,在成功函数中,你可以解析html并将其发送到你的两个独立的区域。

D)如果你紧密耦合你的"foo"侧边栏和这样的内容,你以后可能需要重新设计它。如果您决定"foo"answers"bar"内容区域实际上可以共享"baz"侧边栏呢?你建议的方法将意味着你需要对"baz"内容进行逻辑检查,以便与"baz"侧边栏一起使用。

E)如果你不喜欢我的建议,只是得到内容和侧边栏一次,我认为没有什么可怕的错误做两个单独的和不同的Ajax调用,虽然。有些人会想出用迭代器来做这件事的聪明方法,这样你只需要指定"foo.php"一次(即使进行了两次调用),它会自动抓取两个。但咩。

为什么要让代码晦涩难懂,难以阅读呢?