как правильно использовать компоненты AJAX

помогите  разобраться  в  следующем, есть  данные на  форме

нужно отправить ajax  запрос ,  который  будет  обработан  и  в  зависимости результат  на  странице  будут выполнены  изменения

php + jQuery  - делаю  без проблем.

Если  можно пару  рабочих  фрагментов.

И еще читал  документацию CHtml::ajax  есть ссылка http://docs.jquery.c…ry.ajax#options

не совсем  понял  по  откуда некоторые берут  remove  например  http://www.yiiframew…64.html#msg9864

http://rmcreative.ru…post/ajax-v-yii

простенькая статья. может поможет немного разобраться.

Вот как я делаю:

View-файл



<?=CHtml::dropDownList('dropdown', $dropdown, CHtml::listData(DropDown::mo


del()->findAll(array('order' => 'title')), 'id', 'title'),


                            array('ajax' => array('update' => '#dropdown_description',


                                                  'url' => $this->createUrl('dropdown/description'),


                                                  'data' => 'js:"id="+this.value',


                                                  'cache' => false,


                                                  ),


                                  'empty' => 'выбрать')); ?>


Это значит обновляем элемент c id=dropdown_description. Также обрати внимание на параметр data, где нужно вводить явискрипт-код. Это делается с помощью префикса js: (c обязательным двоеточием)

Контроллер:



    public function actionDescription()


    {


        if (Yii::app()->request->isAjaxRequest)


        {


            $dropdown = DropDown::model()->findByPk($_GET['id']);


            echo $dropdown->description;


        }


    }


Ну, и конечно в actionDescription() лучше/разумнее делать не тупое echo, а $this->render(…), где уже и писать то, что хочется загрузить через ajax.

Да, и еще. Если у тебя основная кодировка страниц не UTF-8, то учти, что могут возникнуть траблы с кодировками. Ибо ajax имхо использует исключительно UTF-8.

Если неправ, поправьте.

Quote

Вот как я делаю:

View-файл



<?=CHtml::dropDownList('dropdown', $dropdown, CHtml::listData(DropDown::mo


del()->findAll(array('order' => 'title')), 'id', 'title'),


                            array('ajax' => array('update' => '#dropdown_description',


                                                  'url' => $this->createUrl('dropdown/description'),


                                                  'data' => 'js:"id="+this.value',


                                                  'cache' => false,


                                                  ),


                                  'empty' => 'выбрать')); ?>


Это значит обновляем элемент c id=dropdown_description. Также обрати внимание на параметр data, где нужно вводить явискрипт-код. Это делается с помощью префикса js: (c обязательным двоеточием)

Контроллер:



    public function actionDescription()


    {


        if (Yii::app()->request->isAjaxRequest)


        {


            $dropdown = DropDown::model()->findByPk($_GET['id']);


            echo $dropdown->description;


        }


    }


Ну, и конечно в actionDescription() лучше/разумнее делать не тупое echo, а $this->render(…), где уже и писать то, что хочется загрузить через ajax.

есть пару вопросов:

  1. 'update' => '#dropdown_description', - update  если  так стоит то  ищется  на странице элемент с id dropdown_description  И  заменяется  его содержимое результатом,  а  где  почитать о всех возможных  вариантах этого свойства 

2.  'data' => 'js:"id="+this.value', а  если  нужно пеердать несколько параметров , через  запятую  или  массивом ?

  1. Как я понимаю, то здесь: http://docs.jquery.com/Selectors

  2. В таком случае пишем так: 'data' => 'js:param1=value1&param2=value2'.

Подробнее: http://docs.jquery.c…ry.ajax#options (опция data)

  1. Тут еще можешь почитать: http://www.yiiframew…tml#ajax-detail

Как я понимаю, то здесь: http://docs.jquery.com/Selectors  –  ничего не нахожу по этой ссылке , а  хотелось бы разобраться

Там вся страница посвящена теме селекторов в jQuery. Селектор - это конструкция с помощью которого ты указываешь jQuery над каким элементами производить действия.

Quote

Там вся страница посвящена теме селекторов в jQuery. Селектор - это конструкция с помощью которого ты указываешь jQuery над каким элементами производить действия.

этоя  понимаю, возможно  мы говорим  о разном , попробую  еще раз  спросить о том что мне не ясно

array('ajax' => array('update' => '#dropdown_description',…

я понимаю  что именно название  элемента в массиве update отвечает  за то чтобы  выпадающий  список  полностью  переформировывался.

Уже не помню, но когда искал на форуме  встречал  и другие варианты  этого значения remove , replace да  и собственно фраза из  документации  не  совсем понятна

    * update: string, specifies the selector whose HTML content should be replaced by the AJAX request result.

    * replace: string, specifies the selector whose target should be replaced by the AJAX request result.

Единственно понял  что у опции 'success' - самый высокий приоритет и  все  в  случае  задания  ее  игнорируется

Если знаешь объясни что и как, запутался окончательно .

update - внутренность элемента заменяется на получаемое из аджакс-запроса значение.

replace - весь элемент заменяется. То есть, после замены уже не будет существовать старого элемента.

А success описан здесь http://docs.jquery.c…ry.ajax#options

и описанные в successs js-код вызывается когда получен ответ на аджакс-запрос. В этом случае ты можешь описать функцию, которая делает что-то такое чего ни update, ни replace сделать не могут. Например, парсишь полученный ответ, а потом уже куда-то его выводишь.

И другие подобные параметры описаны тут: http://docs.jquery.c…ry.ajax#options

Quote

update - внутренность элемента заменяется на получаемое из аджакс-запроса значение.

replace - весь элемент заменяется. То есть, после замены уже не будет существовать старого элемента.

А success описан здесь http://docs.jquery.c…ry.ajax#options

и описанные в successs js-код вызывается когда получен ответ на аджакс-запрос. В этом случае ты можешь описать функцию, которая делает что-то такое чего ни update, ни replace сделать не могут. Например, парсишь полученный ответ, а потом уже куда-то его выводишь.

И другие подобные параметры описаны тут: http://docs.jquery.c…ry.ajax#options

спасибо,  понятно

rosko скажи, а  в твоем  примере  с выпадающим списком ни где  не  указано событие, которому  привязываем  ajax.

Для большего понимания  привожу пример и  как  я  отрабатываю  событие onchange

echo

CHtml::dropDownList('lang',Yii::app()->session['lang'],array('ru_ru'=>'Русский','ru_ua'=>'Украинский'),array("onchange"=>$lhref."lang='+$('#lang option:selected').val()"));

а  вот пример:

<?=CHtml::dropDownList('dropdown', $dropdown, CHtml::listData(DropDown::mo

del()->findAll(array('order' => 'title')), 'id', 'title'),

                            array('ajax' => array('update' => '#dropdown_description',

                                                  'url' => $this->createUrl('dropdown/description'),

                                                  'data' => 'js:"id="+this.value',

                                                  'cache' => false,

                                                  ),

                                  'empty' => 'выбрать')); ?>

  который был ранее  показан , 4 параметр  типа $htmlOptions или  это особенности AJAX , хотелось бы разобраться.

Спасибо.

Ajax-запрос выполняется при следующих событиях для следующих типов элементов:

onchange - для textField, hiddenField, passwordField, textArea, dropDownList, listBox, activeTextField, activePasswordField, activeTextArea, activeDropDownList, activeListBox

onclick - для link, mailto, button, submitButton, resetButton, imageButton, linkButton, radioButton, checkBox, ajaxLink, ajaxButton, ajaxSubmitButton, activeRadioButton, activeCheckBox

Quote

Ajax-запрос выполняется при следующих событиях для следующих типов элементов:

onchange - для textField, hiddenField, passwordField, textArea, dropDownList, listBox, activeTextField, activePasswordField, activeTextArea, activeDropDownList, activeListBox

onclick - для link, mailto, button, submitButton, resetButton, imageButton, linkButton, radioButton, checkBox, ajaxLink, ajaxButton, ajaxSubmitButton, activeRadioButton, activeCheckBox

СПАСИБО за помощь

А есть ли возможность это изменить?

К примеру, нужно сделать проверку сложности пароля и событие, соответственно onkeyup

Не пойму как правильно это сделать.

В моем случае это выглядит так:




    echo CHtml::ajaxLink('Like',

                         CController::createUrl('blog/UpdateAjax'),

                         array('update' => '#likes',

                               'data' => 'js: "btn=like&page_id="+document.getElementById("page-id").innerHTML+"&user_id="+document.getElementById("user-id").innerHTML'),

                         array('id' => 'ajax-btn-like')

            );



В дебагере видно что параметры передаются правильно, но вызывается 500 Internal Server Error и в вид ничего не возвращается - нет вывода.

Подскажите пожалуйста, в чем может быть проблема?