ЛЮБЫЕ хорошие / простые примеры Ajax в Cake 1.3 без использования устаревших помощников? - PullRequest
4 голосов
/ 08 мая 2011

Я много использовал AJAX в PHP, но сейчас я пытаюсь изучить CakePHP и не смог найти ЛЮБЫХ хороших / простых примеров того, как использовать AJAX с CakePHP 1.3.Единственные примеры, которые мне удалось найти, - это пейджинг (не то, что мне нужно) или использование устаревших помощников, когда вы заставляете вас включать scriptaculous или prototype.

Есть ли ЛЮБЫЕ хорошие / простые примеры того, какиспользовать AJAX с CakePHP 1.3?Или это кто-то может объяснить здесь?

Все, что я хочу сделать, - это , чтобы пользователь щелкнул ссылку, которая извлекает содержимое файла php и вставляет его в div.Содержимое php-файла будет изменено в зависимости от некоторых переменных POST или GET, отправленных с помощью вызова ajax.Кажется достаточно простым: (

Ответы [ 3 ]

3 голосов
/ 08 мая 2011

Это шаблон, который я использую в CakePHP 1.3.x. Процесс обычно:

  1. Создание альтернативной json-ориентированной компоновки и просмотра файлов
  2. Обнаружение, является ли входящий запрос AJAX
  3. Явное отображение альтернативного макета / представления json вместо text / html

Не забудьте включить компонент RequestHandler и JsHelper в контроллер вашего приложения.

В данном контроллере:

function test() {
    if($this->RequestHandler->isAjax()) {
        $this->set('data', $this->data);
        // Explicit call to render an ajax response, using a layout and view made specifically for ajax
        $this->layout = 'json';
        $this->render('ajax_test');    
    }
    // else render views/controllername/test.ctp like normal
}

Ваше приложение / views / layouts / json.ctp file:

<?php
    header("Pragma: no-cache");
    header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate");
    header('Content-Type: text/x-json');
    header("X-JSON: ".$content_for_layout);

    echo $content_for_layout;
?>

Ваш файл app / views / controllername / ajax_test.ctp должен содержать только:

<?php echo $js->object($data); ?>

Теперь на вашей странице, которая на самом деле собирается сделать ajax-вызов, это может выглядеть примерно так с кодом jQuery:

<div id='status'></div>
<?php echo $form->create('Test', array('id'=>'testForm')),
           $form->input('message'),
           $form->end();
?>
<script type='text/javascript'>
    $('#testForm').submit(function(event) {
    event.preventDefault(); // interrupt form submission
    $.ajax({
        type: "POST",
        url: "/controllername/test",
        data: $('#testForm').serialize(),
        success: function(data, textStatus, xmlHttpRequest) {               
            $("#status").html(data.Test.message);
        },
        error: function(jqXHR, textStatus, errorThrown) {
            alert("There was a problem processing the request: " + jqXHR);
        }
    });
});
</script>
1 голос
/ 10 августа 2011

Вы можете проверить http://wakeusup.com/2011/06/kkajaxify-plugin-cakephp/ на отличный плагин AJAX

0 голосов
/ 08 мая 2011

Я обычно включаю js-файл в требуемое представление $this->Html->script('file', false);.Затем в этом файле я делаю все необходимые вещи AJAX (собираю данные для отправки, отправляю их на другую страницу, возвращаю данные и, наконец, показываю их в необходимом элементе div).

Но помните,что файл, в который отправляются данные, должен быть связан с корнем приложения.Это единственный способ заставить его работать ($.get('/users/view/5'); - в jQuery)

...