Codeigniter JQuery Ajax - PullRequest
       6

Codeigniter JQuery Ajax

1 голос
/ 08 января 2010

Я большой пользователь Codeignitor, и в настоящее время я должен создать страницу с обширными кусочками AJAX. Я использовал JQuery на всем протяжении веб-сайта, и его обработка AJAX была прекрасна до сих пор. Есть кое-что, что просто не чувствует себя хорошо, когда я использую MVC с JQuery. Например: в Jquery я легко устанавливаю URL обратного вызова, который указывает на контроллер, затем контроллер вызывает страницу просмотра, и отображается AJAX, но эта страница просмотра очень маленький PHP-код Так что теперь у меня есть около 40 функций ajax на моей странице, значит ли это, что мне нужно сделать 40 просмотров? это не кажется мне правильным. Есть ли лучший способ обработки / управления представлениями, созданными для AJAX в MVC Frameworks

Спасибо.

Ответы [ 3 ]

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

Вы можете создать один вид, например, ajax.php и установите содержимое соответственно в методах контроллеров. Все методы могут использовать одно и то же представление.

Вышеприведенное верно только для аналогичных представлений, но если методы также схожи, вам следует подумать о рефакторинге кода с использованием параметров uri, см. мой ответ на вопрос о том, как получить параметры из URL .

Но все это зависит от природы контроллеров, их методов и связанных представлений.

EDIT:

Я не советую вам использовать 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;?>

И назовите его через $.get('/index.php/my_controller/edit_via_ajax/name/John_Doe'); в jquery для редактирования имени. Таким образом, многие похожие запросы AJAX могут использовать один и тот же метод, а методы могут совместно использовать представления.

1 голос
/ 08 января 2010

Нет требования, чтобы запрос AJAX использовал представление в CI. Ваши методы контроллера не должны возвращать представление вообще, просто некоторая форма отраженных данных. Если некоторые из ваших представлений очень малы или требуют только минимального количества HTML (вы можете решить, каким может быть минимальный ), вы можете просто выполнить одно из следующих действий:

public function controllerMethod1() {
    $str = '<strong>some html</strong><br />';
    $str .= '<p>and some more</p>';
    die($str);
}

Вы по-прежнему можете выполнять обычные задачи обработки сообщений в модели и просто использовать строковые идентификаторы, чтобы определить, являются ли обновления базы данных успешными или ошибочными:

public function controllerMethod2() {
    if ($this->model->addToDatabase(...)) {
        die('success');
    }
    die('error');
}
0 голосов
/ 09 января 2010

Это то, чего я достиг до сих пор, чтобы иметь один контроллер и один вид. Что может быть лучше?

    /*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;?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...