使用动态php内容加载ajax网站的好习惯

时间:2011-10-23 02:21:45

标签: php jquery ajax

我有点淹没在这里。我有一个相当动态的内容的项目,所以它是用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中(事先清空它们之后)。 E.g。

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);
}

注意:所有的代码都只是一个例子而且是从我脑海中写出来的,只要你知道我想做什么就会出错,这无关紧要。

不知何故感觉不对,但作为奇怪的完美主义者,我从未真正开心,所以可能只是我。 做这样的事情是否有好的做法,你通常如何解决这个问题?欢迎所有建议!

1 个答案:

答案 0 :(得分:2)

这就是事情,我希望它不会因为它是一个普遍的反应并且提出更多问题而不是答案而加剧:

您提出的方法是,根据用户交互,可能会加载新内容,并且在加载新内容时,还会加载新的侧边栏。我对此有一些想法,并提出一个警告:我不是世界上最有经验的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”和“bar”内容区域实际上可以共享“baz”侧边栏怎么办?您提出的方法意味着您需要对“baz”内容进行逻辑检查,以便与“baz”侧边栏一起使用。

E)如果你不喜欢我的建议只是同时获得内容和侧边栏,我发现做两个独立的,不同的Ajax调用并没有什么特别的错误。有些人会想出一个聪明的方法来使用迭代器,这样你只需要指定一次“foo.php”(即使正在进行两次调用),它也会自动抓取两者。但是,好吧。为什么当两个独立且不同的调用清楚地表明预期目的是什么时,使代码深奥且难以阅读。