我是一个重度Codeignitor用户,目前我必须构建一个包含大量AJAX零碎内容的页面。我在整个网站上一直在使用JQuery,到目前为止它的AJAX处理是完美的。当我在JQuery中使用MVC时,有些东西感觉不太对劲。例如:在Jquery中,我很容易地设置了指向控制器的回调URL,然后控制器调用一个视图页面并显示AJAX,但这个视图页面是非常小的PHP代码。所以现在我在我的页面中有大约40个ajax函数要做,这是不是意味着我必须创建40个视图?这在我看来不太对劲。是否有更好的方法来处理/管理在MVC框架中为AJAX创建的视图
谢谢。
发布于 2010-01-08 19:26:27
您可以创建一个视图,例如ajax.php,并在控制器的方法中相应地设置内容。所有方法都可以使用相同的视图。
以上情况仅适用于类似的视图,但如果这些方法也类似,那么您应该考虑将代码重构为使用uri参数,请参阅my answer to a question on how to get parameters from the url。
但这一切都取决于控制器的性质、它们的方法和相关的视图。
编辑:
我不建议您在控制器中使用HTML,但请这样布局您的控制器:
Class My_Controller
{
// some other methods
public function edit_via_ajax($type, $value)
{
/* do some stuff with $type and $value,
sanitize user input etc.
set $status to TRUE or FALSE */
$data['type'] = $type;
$data['value'] = $value;
if ($status === TRUE)
{
$this->load->view('success.php', $data);
}
else
{
$this->load->view('error.php', $data);
}
}
}创建类似success.php的视图
<?=$type;?> was successfully set to <?=$value;?>并通过jquery中的$.get('/index.php/my_controller/edit_via_ajax/name/John_Doe');调用它来编辑名称。这样,许多相似的AJAX请求可以共享相同的方法,方法可以共享视图。
发布于 2010-01-08 19:27:43
不要求AJAX请求必须使用CI中的视图。您的控制器方法不必返回任何视图,只需返回某种形式的回显数据。如果你的一些视图非常小,或者只需要最少的超文本标记语言(你可以决定的最小是多少),你可以简单地执行以下操作之一:
public function controllerMethod1() {
$str = '<strong>some html</strong><br />';
$str .= '<p>and some more</p>';
die($str);
}您仍然可以像往常一样,在模型中处理post请求,并简单地使用字符串标识符来确定数据库更新是成功还是错误:
public function controllerMethod2() {
if ($this->model->addToDatabase(...)) {
die('success');
}
die('error');
}发布于 2010-01-09 18:43:02
这就是我到目前为止所达到的拥有一个控制器和一个视图的方法。有没有更好的办法可以做?
/*Controller*/
class C_ajax extends Controller {
function fn_name(){
$data['ajaxType'] = __FUNCTION__;
// write any code here to be passed
$this->load->view('news/v_news_ajax', $data);
}
}
/*View*/
<?php
switch($ajaxType):
case 'fn_name':?>
//write HTML here
<?php break;?>
<?php case '':?>
// write HTML for another view here
<?php break;?>
<?php endswitch;?>https://stackoverflow.com/questions/2027057
复制相似问题