2012-07-16 73 views
1

可能重复:
MVC ajax calls - where to handle them?我应该在我的MVC框架中使用ajax?

我有一个框架,整体示意图如下:
enter image description here 这画是PHP 5,社交网络的书,我不知道有Page Object部分。我没有任何问题与简单的JavaScript/jQuery语句,但是当涉及到JSON或Ajax我需要获取数据,然后我很困惑!因为在JSON中,我们需要把url部分。在MVC中没有直接的电话。一切将达到前台控制器(index.php)。
现在的问题是如何处理MVC中的JSON或Ajax请求?我应该在另一个目录中创建单独的json php文件来处理不是面向对象的数据库连接等吗?

回答

0

我不知道你正在使用哪个框架,但是Zend Framework例如有一个机制,允许你修改一个动作返回其数据的格式。在Zend Framework中,这被称为上下文切换。

你可能想看看他们是如何实现该功能的,看看你是否可以将它集成到你的mvc中,或者在你自己的mvc中建模它。

http://framework.zend.com/manual/en/zend.controller.actionhelpers.html#zend.controller.actionhelpers.contextswitch

---编辑---

这听起来像你的框架不会委托给控制器?如果是这种情况,我会实施您在您的问题中暗示的解决方案,并实施仅由您的Ajax/REST调用消耗的脚本。

---编辑---

权利,使您的前端控制器请求转发给控制器,这是我会建议实施背景下的控制器级切换,这将工作使用相同的网址,你可以使用的情况下在标准请求中,但要么读取

a)HTTP标头信息以查看您要在AJAX请求中设置的响应类型。

b)在url中发送另一个参数,如format=json,它将切换您的动作的返回类型。

我会推荐阅读我发布的链接中的信息,因为它可能会使事情变得更加清晰。

+0

我自己的框架。我自己创建了一个类似于我发布的图片。 – ALH 2012-07-16 07:40:51

+0

对。我需要在前端控制器(JSON格式,普通视图)中切换视图,然后根据需要发回数据。这是你说的吗? – ALH 2012-07-16 08:05:37

+0

@phpGeek我建议在控制器级别切换,因为前端控制器不直接与其自身的视图进行交互。 – martynthewolf 2012-07-16 08:12:54

1

你应该带参数的“特殊”呼叫FrontController设计指定它在后Ajax调用和不同的方式处理它,例如:

if($_POST['retrieve_postaction']){ 
    //general action 
    //load object and do stuff 
    if($_POST['is_ajax']){ 
     //format data for an ajax call and return it 
     echo json_encode($array_object); 
     exit;} 
    else { 
     //normal action 
    } 
    } 

} 
+0

你的意思是ajax的URL部分总是指index.php? – ALH 2012-07-16 07:42:43

+0

是的,您所做的调用始终在控制器上,就好像您要调用常规操作一样,但参数会将调用标识为“Ajax”,以便您可以以不同方式检索和管理响应。这是一些电子商务平台使用的惯例,这很好,因为你的逻辑部分不会有不同的接入点,并且它保持在一个地方(更容易调试/修改或添加功能,而无需在项目中移动) 。 – kawashita86 2012-07-16 08:26:33

相关问题