Cjuiautocomplete Nie Działa Na Serwerze?

Witam,

Mam takie pole z podpowiedzią:




$this->widget('zii.widgets.jui.CJuiAutoComplete', array(

    'name' => 'nazwa',

    //'value' => 'nazwa21',

    'source' => $this->createUrl('site/autocompleteTest'),

    // additional javascript options for the autocomplete plugin

    'options' => array(

        'minLength' => '4', //2

        'showAnim' => 'fold',

    ),

));




do tego metode w siteController:




public function actionAutocompleteTest() {

        $res = array();       

        if (isset($_GET['term'])) {

            // http://www.yiiframework.com/doc/guide/database.dao

            $qtxt = "SELECT nazwa FROM tbl_miasta WHERE nazwa LIKE :nazwa and id_wojewodztwo =:id_wojewodztwo";

            //$qtxt = "SELECT id FROM tbl_miasta WHERE id = 879";

            $command = Yii::app()->db->createCommand($qtxt);

            $command->bindValue(":nazwa", '%' . $_GET['term'] . '%', PDO::PARAM_STR);            

            $command->bindValue(":id_wojewodztwo", 12, PDO::PARAM_INT); //?

            //echo $_GET['term'];            

            $res = $command->queryColumn();

        }

        echo CJSON::encode($res);

        Yii::app()->end();

    }



metoda znajduje miasta w konsoli widzę właściwe miasto (gdy stronka działa na localhoscie wszystko śmiga ale gdy wrzucę na serwer np. home.pl autocomplete nie działa nie wyświetla się rezultat w tym polu tekstowy. Gdzie popełniłem błąd że ten autocomplete nie działa?

Pozdrawiam

Jarek

Czy na home.pl masz włączone automatyczne dodawanie skryptu do statystyk do każdej odpowiedzi? Jeśli tak, to wypluwana przez akcję odpowiedź po odebraniu przez widget nie jest już prawidłowym JSONem.

Tak czy inaczej, co pokazuje Firebug lub podobne narzędzie? Request jest wykonywany? Jak wygląda odpowiedź?

Tak miałem włączone automatyczne dodawanie skryptu do statystyk do każdej odpowiedzi,wystarczyło to odznaczyć i poszło, a mam jeszcze jedno pytanie wybieram z listy rozwijalnej element chciałem jego id zapisać w zmiennej np:




public $moje_id;


// getter

    public function getMoje_id() {

        return $this->moje_id;

    }


    // setter

    public function setMoje_id($value) {

        $this->moje_id = $value;

    }




oraz dropdown:




echo CHtml::dropDownList('nazwa1', ' ', $list, array(

    'class' => 'chzn-select',

    'empty' => 'Wybierz wojewodztwo',

    'ajax' => array(

        'type' => 'POST',

        'url' => array('miasta/listaMiast'),        

        'data' => array('nazwa1' => 'js:this.value',),

   

    )

));



w metodzie:




public function actionListaMiast() {

       

        if (isset($_POST['nazwa1']))            

            $wart = (int) $_POST['nazwa1'];

            $this->setMoje_id($wart);

}



ustawiam zmienna jest ok ale gdy próbuje ja odczytać ma wartość null, pobieram dane:




  public function actionAutocompleteTest() {

              

        $value = $this->getMoje_id();

}



ale wartość ma null, jak rozwiązać ten problem?

Pozdrawiam

Jarek

Próbujesz przypisać wartość właściwości kontrolera w jednym żądaniu a potem odczytać ją w kolejnym? Przecież każde przetwarzane żądanie w PHP jest od siebie odizolowane. Mógłbyś zapamiętać to np. w sesji albo bazie danych albo współdzielonym cache ale będziesz miał problem jeśli kilka żądań będzie wywołanych równolegle.

Żeby filtrować wyniki pola autocomplete po wartości listy rozwijanej dodaj tą wartość do żądania odpalanego przez autocomplete. Żeby to zrobić, musisz zamiast url w parametrze source podać funkcję. Odsyłam do dokumentacji jQuery UI Autocomplete.

Bardzo zgrubny przykład:




'source'=>'js:function(request, response) {

            $.ajax({

                url: '.$this->createUrl('site/autocompleteTest').',

                data: request,

                dataType: \'json\'

            }).success(function(data) {

                response(data);

            });

        }'



Dzięki za wyczerpującą odpowiedź, mój kod dokładnie wygląda tak i działa:




$this->widget('zii.widgets.jui.CJuiAutoComplete', array(

    'name' => 'nazwa',    

    'source'=>'js:function(request,response){

        $.ajax({

            url: "' .$this->createUrl('site/autocompleteTest').'",

            dataType: "json",

            data : {

                    term: request.term,

                    id_woj: $("#nazwa1").val() 

            },

            success: function(data) {

                response(data);

            }

         })

     }',

    'options'=>array(

        'minLength'=> '4',

    ),

    'htmlOptions' => array(

        'style' => 'height:20px;',

    ),

));



wszystko smiga że aż miło:)