AJAX以及如何在PHP中最好地处理它的服务器端

时间:2009-06-03 21:27:13

标签: php ajax model-view-controller codeigniter

我开始写相当多的ajax重型网站,但我从来没有真正阅读过最佳实践,现在我也想要,我找不到一篇文章来解决我想知道的问题。我真正想要了解的是处理AJAX调用服务器端,比如,如果所有数据都使用JSON / XML传回,或者是纯HTML,如果您尝试不将两者混合用于单个函数根据结果​​打电话。另外,由于我主要使用CodeIgniter(一个MVC框架)编程,你如何最好地将正常的页面加载请求与AJAX结果分开。

我可以制作AJAX网站,但是我想知道如何最好地建立一个AJAX网站,如果人们可以提供一些亮点或指出我正确的方向,我将非常感激。

由于 汤姆

7 个答案:

答案 0 :(得分:6)

我最近使用CodeIgniter完成了一个AJAX重型站点,并在此过程中学到了很多东西。这些是我学到的东西(读:我犯的错误):

不要使用相同的方法返回html页面和json。

首先,设置这样的设置似乎是个好主意:

/ controller / method / format

格式的默认值为'html'。我的想法是,我可以像/ object / view那样显示该对象的html页面,并像/ object / view / json那样返回该对象的json数据。

在实践中,这会使事情变得非常混乱。您最终会在一个方法中混合使用许多不同的功能,这使得代码变得更加复杂。 ICK。

相反,我现在所做的是在应用程序/控制器下添加一个'api'子文件夹。该子文件夹中的控制器仅返回json数据。它更干净。

请勿在javascript中重新实现模板

通过AJAX调用获取内容时有两种方法。您可以返回某种编码数据(JSON,XML)并将其插入页面上的正确位置。或者你可以渲染一大块html,然后将其插入div中的某个地方。

如果你去数据路径,试着坚持非常简单的标记结构,例如span或简单的无序列表。就我而言,我从服务器返回的导航的某个部分是一个JSON编码链接数组。

我的javascript会将它们吐出正确的菜单结构。当菜单变得更复杂时,我的脚本包含了这种复杂性。现在,该菜单的标记在CI模板和javascript中都是重复的。

在这种情况下,最好让服务器返回一个包含菜单标记的html块,而不是尝试从客户端上的数据构建它。

谨慎/谨慎地/仅在需要时使用AJAX

您可以通过巧妙地使用AJAX请求来节省一些服务器资源。但是,如果你被带走(* coughlikemecough *),你很快就会发现每个用户操作都会运行几个AJAX请求。从性能角度来看,这通常更糟糕,因为每个请求都有其开销份额,并且开销将抵消仅请求所需资源的好处。

如果您发现单击一个界面元素会触发多个AJAX请求,这是一个红旗,可以仔细思考最新情况。你可能在没有任何好处的情况下创造复杂性。

JSON编码很不错

你可以json_encode()数据库查询的结果,它将生成你可以在脚本中使用的非常好的对象。语法清晰,并且与CodeIgniter的db函数返回的结果一起使用。

希望你能找到一些有用的东西。当你可以向某人别人的错误中学习时,总是更好! :)

答案 1 :(得分:5)

JSON / XML或plain

我认为你必须自己做出选择。您可以使用XML或JSON或仅使用纯HTML。它还取决于您的问题的复杂性。我会选择json,因为PHP5有非常简单的方法来编码和解码json。

服务器侧

  • 只需将AJAX操作放入控制器即可。使用get获取数据和codeigniter post函数以在服务器上存储数据。
  • 我建议您查看yahoo's developer best practices,以确保您的网站能够快速运行。如果可能的话,还应该缓存ajax请求。

的Javascript

jquery使json调用非常简单。您可以使用jQuery.get来检索信息,使用Jquery.post来存储数据。

实施例

我还将尝试在线提供一个简单的示例供您查看。

祝你好运,
阿尔弗雷德韦斯特维尔德

答案 2 :(得分:0)

嗯,这取决于究竟想做什么。因为使用ajax函数的简单方法 - 使用jQuery框架。它拥有您需要的一切。

答案 3 :(得分:0)

如果您对所有内容使用AJAX,甚至是页面请求,它都不是很有用。您将在后退按钮,书签,js-off浏览器等方面遇到问题。 你可以破解它,但值得不去做。 使用AJAX向用户发布小消息,或者在此体验,SO。

答案 4 :(得分:0)

使用Ext JS或Jquery看看他们提供了什么,有很多链接可以看看他们做了什么。

在查看这些产品的一些Demo后,您可能会受到启发,在您的网站上使用其中一些内容。

除了你的瓶颈之外的其他衡量标准,并尝试平行加载它的位置。

答案 5 :(得分:0)

这取决于您尝试使用AJAX实现的目标。通常有足迹/复杂性权衡。

例如,您可以让AJAX调用从服务器检索整个生成的HTML列表,包括标记,然后将其注入容器(如div)。这很容易实现,但是缺点是必须向浏览器发送更多字节。

另一方面,您可以让服务器发送一个JSON字符串以响应AJAX调用,并让客户端将每个位包装在适当的标记中并将其放在页面中。这更复杂,但可能更适合某些情况。

这实际上取决于你想要实现的目标,没有一条通用规则来管理'实现AJAX的最佳方式'。

答案 6 :(得分:0)

如果您不了解如何使用Jquery和CodeIgniter设置调用,请记住您用于AJAX调用的URL是由Controller构造的。您可以使用控制器方法为AJAX调用创建URL。

有关详细信息,本指南帮助我介绍了AJAX + CodeIgniter。

http://www.mrforbes.com/thoughts/2009/01/28/a-quick-code-igniter-and-jquery-ajax-tutorial/