Обновление содержимого через AJAX используя renderPartial()
Рубрика: Перевод Cookbook
12 Окт. 2009
Наиболее легкий способ обновления содержимого через Ajax, это использование метода partialRender(). Давайте научимся им пользоваться!
---
Для этого примера у меня есть три файла : контроллер (HelloWorldController.php) и два отображения (index.php и _ajaxContent.php)
controllers/HelloWorldController.php:
class HelloWorldController extends CController
{
public function actionIndex()
{
$data = array();
$data["myValue"] = "Данные загружены";
$this->render('index', $data);
}
public function actionUpdateAjax()
{
$data = array();
$data["myValue"] = "Данные обновлены через AJAX";
$this->renderPartial('_ajaxContent', $data, false, true);
}
}
В actionIndex() я устанавливаю myValue равной значению "Данные загружены" и передаю её в "index.php" и "_ajaxContent.php". actionUpdateAjax() - используйется для изменения переменной, и через renderPartial отдает новое значение.
views/helloWorld/index.php
<div id="data">
<?php $this->renderPartial('_ajaxContent', array('myValue'=>$myValue)); ?>
</div>
<?php echo CHtml::ajaxButton ("Update data",
CController::createUrl('helloWorld/UpdateAjax'),
array('update' => '#data'));
?>
При клике на кнопку (ajaxButton) вызывается actionUpdateAjax() и полученное значение вставляется в div "data".
views/helloWorld/_ajaxContent.php
<?php echo $myValue ?>
Просто отображаем $myValue
Вот и все. Запускайте index.php?r=helloWorld и пользуйтесь!
- Оригинал "Update content in AJAX with partialRender" [англ.]
Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
- Пару дней назад столкнулся с очень распространенной проблемной среди разработчиков - кодировкой. Для меня эта проблема исчезла когда я ... "Поблема с кодировкой на ZendServer"
- Вас смущает капча на вашем сайте? Так давайте сделаем её сложнее... В этом уроке мы поговорим про интеграцию с ... "Усложняем стандартную капчу, при помощи reCaptcha"
- Модель это класс для работы приложения с базой. Для каждой таблицы с которой предстоит работать — создается своя модель ... "Шаг 4 : Модель"

[guest] RSol
Было сказано: Понедельник, 12 Октябрь 2009
А почему так:
CController::createUrl('helloWorld/UpdateAjax'),
я обычно использую
array('helloWorld/UpdateAjax'),
и все работает?

[adm] zolter
Было сказано: Понедельник, 12 Октябрь 2009
Дело в том что когда ты делаешь через createUrl, Yii сам формирует путь согласно правилу (если найдет) указанному в маршрутах твоего приложения.

[adm] zolter
Было сказано: Среда, 14 Октябрь 2009
Сенк. Просто с англ. названия переводил, что то пропустил между глаз :)

[guest] Гость
Было сказано: Пятница, 13 Ноябрь 2009
А как навесить на изменение текстового инпута вызов аякс-метода? То есть как suggest на Google и т.п., когда под вормой ввода открываются подсказки?

[guest] Гость
Было сказано: Понедельник, 16 Ноябрь 2009
Решение было простейшее — CAutoComplete
Вопрос снят.

[adm] zolter
Было сказано: Понедельник, 16 Ноябрь 2009
Сори показалось что ответил вам . Там в кукбуке официальном еще пример есть по этому поводу

[guest] Гость
Было сказано: Понедельник, 16 Ноябрь 2009
А yii в любой ОС работает (кроссбраузерный)?)

[adm] zolter
Было сказано: Понедельник, 16 Ноябрь 2009
Уии использует jQuery. Он в принципе поддерживает все современные браузеры

[guest] Гость
Было сказано: Понедельник, 16 Ноябрь 2009
И хотел бы узнать во всех Операционных системах yii работает

[adm] zolter
Было сказано: Понедельник, 16 Ноябрь 2009
Это php фреймворк. Он будет работать везде где вы поднимите веб-сервер. Для windows к примеру xampp, для linux - lampp. Для макинтошей тоже что то есть. Так что да.

[guest] Саша
Было сказано: Пятница, 20 Август 2010
А как же Yii::app()->request->isAjaxRequest
Такой подход будет более гибким

[guest] zolter
Было сказано: Пятница, 20 Август 2010
Это ж перевод. Но "Yii::app()->request->isAjaxRequest" конечно следует использовать для проверки действительно ли ajax запрос.

[guest] Гость
Было сказано: Четверг, 01 Март 2012
как быть когда я подгружаю контент с еще одной ajaxButton ?
фреймворк почему-то вешает на него событие первой кнопки, т.к. id прописывается id="yt0", хотя должен быть id="yt1"

[guest] zolter
Было сказано: Четверг, 01 Март 2012
Посмотрите api про renderPartial, там третий или четвертый параметр отвечает будет генерироваться js код для динамических объектов на подгружаемой странице или нет

[guest] Гость
Было сказано: Вторник, 21 Август 2012
У меня в <div id="data"></div> загружается вся страница

[guest] Гость
Было сказано: Вторник, 21 Август 2012
>[guest] Гость
>Было сказано: Вторник, 21 Август 2012
>У меня в <div id="data"></div> загружается вся страница
переведите статью до конца
Note: if using accessRules() in your controller file, you will need to modify accessRules() by adding the appropriate part of the function name to a rule set - in this case 'updateajax' like this:


