Ajax方法在控制器中调用相同的函数,但需要在不同的区域中加载不同的结果

时间:2010-01-11 16:20:25

标签: php codeigniter jquery

我对我的网站有点困惑,目前在我的网站的新部分(其中包括)用户翻阅缩略图并获得显示在其下方的文章摘要,然后当他们点击所述缩略图时,文章出现在页面左侧,

ajax的工作原理是从链接中拉出href来覆盖缩略图,然后使用它作为方法调用的url,问题是click版本也将使用相同的函数调用,我无法弄清楚如何为了显示取决于甚至发生的事情的不同内容,目前我将其作为我的代码,

    <?php
if(isset($content)) {
    foreach($category_name as $k => $v) {
        echo "<h2 class='$v[category_name]'><a href='#'>$v[category_name]</a></h2>";
        echo "<div class='$v[category_name]'>";
    }
    $replace = array(".", "png", "gif", "jpg");
    $count = 0;
    foreach($content as $k=>$v) {
    $count ++;
    $image_name = str_replace($replace, "", $v['image_name']);
    echo "<a class='contentlink' href='index.php/home/get_content_abstract/$v[content_id]'>";
    echo "<img src='/media/uploads/".strtolower($v['category_name'])."/".$image_name."_thumb.png' alt='This is the picture' />";
    echo "</a>";
    }
    echo "</div>";
//die(var_dump($content));
}
?>
<script>
    $("a.contentlink").mouseover(function(){
        var url = $(this).attr("href");
            $.ajax ({
                url: url,
                type: "POST",
                success : function (html) {
                    $('#abstract').html(html);
                }
            });
    });

    $("a.contentlink").click(function(ev) {
        ev.preventDefault();
        $('#main_menu').hide();
        var url = $(this).attr("href");
        $.ajax({
            url:url,
            type: "POST",
            success : function (html) {
            //  alert(html)
                $('#left-content').html(html);
            }
        })
    });

</script>

被调用的方法是

    public function get_content_abstract() {
    $this->load->model('content_model');
    if($query = $this->content_model->get_content_by_id($this->uri->segment(3))) {
        $data['abstract'] = $query;
    }
    $this->load->view('template/abstract', $data);

}

这是由链接/ get_content_abstract / 3之后的ajax调用的,其中3或任何其他数字是文章ID。

如何排序以便我可以再次使用此功能,但只显示文章的正文内容而不是摘要如果单击并删除链接?

3 个答案:

答案 0 :(得分:2)

您可以传递一个调用类型变量并在您的php代码中检查它。请注意,我已将data添加到您的ajax调用中。

$("a.contentlink").mouseover(function(){
        var url = $(this).attr("href");
            $.ajax ({
                url: url,
                type: "POST",
                data: "calltype=abstract",
                success : function (html) {
                    $('#abstract').html(html);
                }
            });
    });

    $("a.contentlink").click(function(ev) {
        ev.preventDefault();
        $('#main_menu').hide();
        var url = $(this).attr("href");
        $.ajax({
            url:url,
            type: "POST",
            data: "calltype=full",
            success : function (html) {
            //  alert(html)
                $('#left-content').html(html);
            }
        })

答案 1 :(得分:0)

在ajax调用的url中传递一个GET变量。

答案 2 :(得分:0)

您只需通过GET或POST将变量传递给处理程序,告诉处理程序显示哪些内容。由于您的AJAX调用很简单,您可以简化调用并使用load()。如果您不能使用$ _GET或$ _POST,只需在URL中附加数据:

$("a.contentlink").mouseover(function() {
    // URL becomes index.php/home/get_content_abstract/3/abstract
    $('#abstract').load($(this).attr("href")+'/abstract');
});

$("a.contentlink").click(function(ev) {
    $('#main_menu').hide();
    // URL becomes index.php/home/get_content_abstract/3/full
    $('#left-content').load($(this).attr("href")+'/full');
    return false;
});

在PHP中,您可以使用以下内容:

public function get_content_abstract() {
    $this->load->model('content_model');

    if($this->uri->segment(4) == 'full') {
        // Load full content
    } else {
        // Load abstract
    }
    $this->load->view('template/abstract', $data);
}