Убрать подключение jQuery при запросе через ajax

Ajax генерирует запрос на сервер. В результате получаем html контент + js код который требуется исполнить. js код пишу через Yii::app()->clientScript->registerScript. Код примерно такой




<?php

class TestController extends Controller {

    public function actionAjax() {

        $this->layout=false;

        $this->render('_ajax_content');

    }

}

 

И view _ajax_content




<?php 

Yii::app()->clientScript->registerScript('test', "$('#aaa').click(function(){alert('click ok')})");

?>

<div id="aaa">click</div>



В результате все работает только при каждом запросе вижу что подгружается еще и jquery. Что не требуется поскольку когда страница загрузилась jquery уже подключен. И хоть код что грузится через аякс его использует грузить еще раз не требуется. Что подскажете с этим поделать?

А зачем script подгружать в ajax? .live() или .delegate() должно хватить… Лучше подгружать только данные (в xml|json) или хотя бы html-блок.

А что в AjAx-е приходит не смотрели? registerScript -см строку 612 :)

Если уж сильно нужно, можно ручками <sript> прописать… или $position задать соответствующую

ps Как-то привычнее для меня


$this->renderPartial();Yii::app()->end();

Я не считаю что js подгружать через ajax плохая практика. Я подгружаю обычно html код + js обработчики. Если этот блок кода может не запрашиваться на странице. live тоже использую, но для других целей. Потому для этих целей renderPartial не подходит. Точнее для него нужно выставить 3-й параметр что вообщем привратит его просто в render. Пока вижу решение через Yii::app()->clientscript->scriptMap[‘jquery’] = false;

Вот именно так я и поступаю. Правда я очищаю все скрипты, а не только jquery и оформил эту очистку отдельным методом, наследовав CClientScript.




class myClientScript extends CClientScript {

public function clearScripFiles(){

    $this->coreScripts=array();

    $this->scriptFiles=array();

}

}



и в конфиге




	// application components

	'components'=>array(


        "clientScript"=>array(

            "class"=>"myClientScript",

        ),

);



использование в представлении:


if (Yii::app()->request->isAjaxRequest) Yii::app()->clientScript->clearScripFiles();

Полазил в исходниках. Можно использовать такую конструкцию что бы не грузить js файлы

Yii::app()->clientScript->scriptMap[’*.js’] = false;

Хочу заметить что Ваше утверждение не является верным, так как renderPartial не применяет layout к выводимому содержимому. А в ответах на AJAX-запросы layout - это лишний трафик.