Метод Ajax вызывает одну и ту же функцию в контроллере, но должен загружать разные результаты в разных областях - PullRequest
0 голосов
/ 11 января 2010

Я немного застрял на своем веб-сайте, в настоящее время в новом разделе моего сайта (среди прочего) пользователь переворачивает миниатюру и отображает реферат статьи, отображаемый под ним, а затем, когда нажимает на миниатюру, появляется статья в левой части страницы

Ajax работает, вытягивая ссылку из ссылки, которая окружает миниатюру изображения, и используя ее в качестве 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);

}

Это вызывается ajax по ссылке / get_content_abstract / 3, где 3 или любое другое число является идентификатором статьи.

Как я могу отсортировать, чтобы я мог использовать эту функцию снова, но показывать только содержание статьи, а не реферат, если ссылка нажата и наведена мышка?

Ответы [ 3 ]

2 голосов
/ 11 января 2010

Вы можете передать переменную типа вызова и проверить ее в своем 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);
            }
        })
0 голосов
/ 11 января 2010

Вы просто передаете в обработчик переменную через 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);
}
0 голосов
/ 11 января 2010

передать переменную GET в URL-адрес вызова ajax.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...