首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Codeigniter JQuery Ajax

Codeigniter JQuery Ajax
EN

Stack Overflow用户
提问于 2010-01-08 18:58:34
回答 3查看 2.3K关注 0票数 1

我是一个重度Codeignitor用户,目前我必须构建一个包含大量AJAX零碎内容的页面。我在整个网站上一直在使用JQuery,到目前为止它的AJAX处理是完美的。当我在JQuery中使用MVC时,有些东西感觉不太对劲。例如:在Jquery中,我很容易地设置了指向控制器的回调URL,然后控制器调用一个视图页面并显示AJAX,但这个视图页面是非常小的PHP代码。所以现在我在我的页面中有大约40个ajax函数要做,这是不是意味着我必须创建40个视图?这在我看来不太对劲。是否有更好的方法来处理/管理在MVC框架中为AJAX创建的视图

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-08 19:26:27

您可以创建一个视图,例如ajax.php,并在控制器的方法中相应地设置内容。所有方法都可以使用相同的视图。

以上情况仅适用于类似的视图,但如果这些方法也类似,那么您应该考虑将代码重构为使用uri参数,请参阅my answer to a question on how to get parameters from the url

但这一切都取决于控制器的性质、它们的方法和相关的视图。

编辑:

我不建议您在控制器中使用HTML,但请这样布局您的控制器:

代码语言:javascript
复制
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的视图

代码语言:javascript
复制
<?=$type;?> was successfully set to <?=$value;?>

并通过jquery中的$.get('/index.php/my_controller/edit_via_ajax/name/John_Doe');调用它来编辑名称。这样,许多相似的AJAX请求可以共享相同的方法,方法可以共享视图。

票数 2
EN

Stack Overflow用户

发布于 2010-01-08 19:27:43

不要求AJAX请求必须使用CI中的视图。您的控制器方法不必返回任何视图,只需返回某种形式的回显数据。如果你的一些视图非常小,或者只需要最少的超文本标记语言(你可以决定的最小是多少),你可以简单地执行以下操作之一:

代码语言:javascript
复制
public function controllerMethod1() {
    $str = '<strong>some html</strong><br />';
    $str .= '<p>and some more</p>';
    die($str);
}

您仍然可以像往常一样,在模型中处理post请求,并简单地使用字符串标识符来确定数据库更新是成功还是错误:

代码语言:javascript
复制
public function controllerMethod2() {
    if ($this->model->addToDatabase(...)) {
        die('success');
    }
    die('error');
}
票数 1
EN

Stack Overflow用户

发布于 2010-01-09 18:43:02

这就是我到目前为止所达到的拥有一个控制器和一个视图的方法。有没有更好的办法可以做?

代码语言:javascript
复制
    /*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;?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2027057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档