CodeIgniter Ajax Layer - PullRequest
       2

CodeIgniter Ajax Layer

3 голосов
/ 14 марта 2012

Я много занимался исследованием ajax, но, похоже, не могу найти много о создании отдельного слоя ajax с codeigniter ... Я видел контроллеры ajax в дереве каталогов людей, выполняющих обучающие видео на codeigniter,просто никогда не получал реального объяснения.Я предполагаю, что это способствует инкапсуляции и показывается только пользователям с включенным javascript и т. Д., Но я не уверен, как реализовать его в контроллере для использования в моих собственных проектах.

Ответы [ 2 ]

5 голосов
/ 14 марта 2012

Все зависит от того, что вы делаете. На мой взгляд, самый простой способ - это не иметь отдельные контроллеры и URL AJAX, а обнаружить запрос в вашем контроллере и вывести что-то отличное от того, что вы обычно делаете. Входной класс имеет функцию для этого:

/**
 * Is ajax Request?
 *
 * Test to see if a request contains the HTTP_X_REQUESTED_WITH header
 *
 * @return  boolean
 */
public function is_ajax_request()
{
    return ($this->server('HTTP_X_REQUESTED_WITH') === 'XMLHttpRequest');
}

Я предпочитаю использовать константу:

/**
 * Is this an ajax request?
 *
 * @return      bool
 */
define('AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest');

Пример использования в методе контроллера:

$data = $this->some_model->get();
if ($this->input->is_ajax_request())
{
    // AJAX request stops here
    exit(json_encode($data));
}
$this->load->view('my_view', $data);

Таким образом, у вас нет идентичной или похожей логики приложения, распространяемой через несколько разных контроллеров, и ваш код может быть более удобен в обслуживании. Например, ваши стандартные HTML-формы могут публиковаться в одном и том же месте с помощью AJAX и иметь различный вывод, что также помогает сделать прогрессивное улучшение 1013 * проще и чище. Кроме того, у вас не будет URL-адресов «только для AJAX», которые необходимо «скрыть» от пользователя.

0 голосов
/ 14 марта 2012

Я попытаюсь предложить простое решение, которое я использовал в прошлом.Я, однако, не уверен в вашем профессиональном знании / знакомстве с CodeIgniter, также это мое собственное "домашнее" решение, которое я разработал для решения проблем в CodeIgniter.

Мне нравится CodeIgniter за его простоту и небольшой отпечаток.Но некоторые из его функций я не использую: я не использую предоставленную систему соединения с базой данных, так как я немного уродец управления, а внедрение SQL так распространено.По этой причине я научился отклоняться в рамках.

Чтобы создать отдельный «слой», в котором размещается обработка AJAX, и поддерживать его в чистоте и порядке при реализации, я просто создаю отдельный объект контроллера, которыйконкретная задача - отвечать на запросы AJAX.Таким образом, ваши контроллеры "веб-страницы" отделены от ваших контроллеров "Ajax".

class Ajax extends CI_Controller
{
    function __construct(){ parent::__construct();}
    function webserv(){ /* Your Web Service code here... */}
}

Затем вы будете направлять ваши запросы AJAX на этот URL:

http://www.example.com/ajax/webserv/

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