2012-04-25 96 views
3

当通过AJAX提交时,我有一个表单提交给submit_ajax方法。现在,当我将它作为AJAX请求接收时,我想返回一个JSON对象。使用AJAX与MVC(CodeIgniter)回显响应的正确方法

在这种情况下,我有两个选择。遵循MVC模式,什么会被认为是正确的方式?

选项1 回声它从控制器

class StackOverflow extends CI_Controller 
{ 
    public function submit_ajax() 
    { 
     $response['status'] = true; 
     $response['message'] = 'foobar'; 
     echo json_encode($response); 
    } 
} 

选项2设置,从所述控制器接收的数据并回它的图。

class StackOverflow extends CI_Controller 
{ 
    public function submit_ajax() 
    { 
     $response['status'] = true; 
     $response['message'] = 'foobar'; 
     $data['response'] = $response; 
     $this->load->view('return_json',$data); 
    } 
} 

//return_json view 
echo json_encode($response); 
+2

我意识到这不是你要求的,但作为一个附注,[Output class](http://codeigniter.com/user_guide/libraries/output.html)提供了一个方便的方法来设置适用于JSON响应的MIME类型:'$ this-> output-> set_content_type('application/json') - > set_output(json_encode(array('foo'=>'bar')));' – 2012-04-25 12:29:16

回答

3

约笨的伟大的事情是,在大多数情况下,它是由你自己来决定哪一个你'更舒服。

如果你(和你的学院)喜欢通过控制器回声,去吧!

我个人通过Controller回应ajax回复,因为这很容易,并且您收集了所有简单的脚本,而不必打开视图文件来确认一个明显的json_encode()

在这种情况下,我唯一能看到它使用视图的逻辑是,如果您有2个视图文件,例如echo的json和XML。那么将相同的价值传递给这些视图并获得不同的结果可能会很好。

+0

我做了相同。我通过控制器回应ajax。 – PaulM 2012-04-25 10:28:24

1

通常当你必须在ajax funnction上显示成功的东西时,你需要标志意味着一些消息。并根据你显示或播放成功的信息。现在不需要创建额外的视图。控制器中的简单回声json_encode()就足够了。这很容易操纵。

2

根据MVC模式的正确方法是在视图中显示数据。控制器在任何情况下都不应显示数据。

MVC经常出现在Web应用程序中,其中视图是由应用程序生成的HTML或 XHTML。控制器接收GET或POST 输入,并决定如何处理它做...

来源:http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller