Помогите пожалуйста с AJAX

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
sashalom
Сообщения: 15
Зарегистрирован: 2012.03.04, 14:37

Помогите пожалуйста с AJAX

Сообщение sashalom »

К созданию этой темы привела нерешенность этой темы: viewtopic.php?f=3&t=5943&p=37232#p37232

Проблема по сути осталась та-самая
при изменении значения одного списка, должны обновится два списка

если надо обновить один список я делаю это так:
_form:

Код: Выделить всё

echo $form->dropDownList($model,'fk_obl', Oblast::model()->getGenderOptions(),array(
                    'empty'=>'Виберіть місто',
'ajax' => array(
'type'=>'POST',
'url'=>CController::createUrl('houseProd/getTown'), 
'update'=>'#HouseProd_fk_town',
)));
controller:

Код: Выделить всё

public function actionGetTown()
    {
        $data=  Town::model()->findAll('fk_obl=:fk_obl', 
                  array(':fk_obl'=>(int) $_POST['HouseProd']['fk_obl']));
 
                $data=CHtml::listData($data,'id','town');
                echo CHtml::tag('option',
                     array('value'=>''),CHtml::encode('Виберіть місто'),true);
                foreach($data as $value=>$name)
                {
                    echo CHtml::tag('option',
                     array('value'=>$value),CHtml::encode($name),true);
                }
    }
Вот мне написали такой ответ
esche писал(а):Можно, конечно. Как именно - зависит от того, нужны ли улицы внутри района или внутри города.
Если внутри города - то обновление аналогичное (самый простой вариант в реализации - делать ещё один ajax-запрос на сервер и обновлять второй список)
Если внутри района - всё тоже самое.. только передавать значение второго списка, а обновлять третий.
По-хорошему, всё это можно сложить в один запрос, возвращать, например в JSON, а данные списков разбирать уже на клиенте.
но я не смог разобраться разобраться с кое какими нюансами
как сделать ещё один ajax-запрос на сервер и обновлять второй список
esche писал(а):можно сложить в один запрос, возвращать, например в JSON, а данные списков разбирать уже на клиенте
с этим у меня немого больше затруднений

мне друг посоветовал вернуть все нужные мне даные в виде JSON и написал код для клиентской части:

Код: Выделить всё

$("CityDropDownSelector").change(function () {
    $.ajax({
        type: "POST",
        url: "functionOnServerSide", //functionOnServerSide - назва процедури на сервері, яка має виконуватись і повертати результат
        data: { value: "CityDropDownSelectedValue" },//дані які ти передаєш, в форматі JSON і приймаєш ти тоже в цему форматі
        dataType: "json",
        success: function (data) {//data - дані які вертаються з серверу(клас з двома полями, вулиці і райони)
            //чистимо дропдауни
            $("BlockDropDownSelector").empty();
            $("StreetDropDownSelector").empty();
            //заповнюємо дропдауни
            for (var block in data.blocks)
                $("BlockDropDownSelector").append("<option value='" + block.key + "'>" + block.Name + "</option>");
            for (var street in data.streets)
                $("StreetDropDownSelector").append("<option value='" + street.key + "'>" + street.Name + "</option>");
        },
        error: function () {
            alert("error");
        }
    });
});
 
казалось бы все очевидно просто, но я незнаю как прикрутить этот код в Yii
вообще то вижу что код очень похож на код встроенного аякса и думаю может кто то может помочь переделать его или дать какой то совет по интересней

заранее благодарен
nikitakls
Сообщения: 47
Зарегистрирован: 2011.01.25, 08:18

Re: Помогите пожалуйста с AJAX

Сообщение nikitakls »

Код: Выделить всё

    echo $form->dropDownList($model,'fk_obl', Oblast::model()->getGenderOptions(),array(
                        'empty'=>'Виберіть місто',
    'ajax' => array(
    'type'=>'POST',
    'url'=>CController::createUrl('houseProd/getTown'), 
    'success'=>'js:function (data) {//data - дані які вертаються з серверу(клас з двома полями, вулиці і райони)
            //чистимо дропдауни
            $("BlockDropDownSelector").empty();
            $("StreetDropDownSelector").empty();
            //заповнюємо дропдауни
            for (var block in data.blocks)
                $("BlockDropDownSelector").append("<option value='" + block.key + "'>" + block.Name + "</option>");
            for (var street in data.streets)
                $("StreetDropDownSelector").append("<option value='" + street.key + "'>" + street.Name + "</option>");
        }',
    )));
 
Пример кода
Только нужно с кавычками разобраться и с кодом.
Т.е. нужно самому переписать функцию обновления контента.
sashalom
Сообщения: 15
Зарегистрирован: 2012.03.04, 14:37

Re: Помогите пожалуйста с AJAX

Сообщение sashalom »

nikitakls писал(а): Только нужно с кавычками разобраться и с кодом.
Т.е. нужно самому переписать функцию обновления контента.
Большое спасибо, вроде бы как все понял, но щяс нету времени протестировать, чуть позже отпишусь получилось ли
Ответить