Kohana Выборка из базы данных при помощи Ajax-запроса

Lobezki

Новичок
Доброго времени суток!

Задача такова:

пользователь вводит в input значение(это штрих-код) и при помощи ajax-запроса в соответствующем диве должна отобразиться информация по этому штрих-коду.

На данном этапе у меня
- происходит выборка из бд в массив, но в браузер ничего не возвращается. Ниже привожу код.

Вид:
HTML:
<form action="" method="post" >
                    <table border="1" class="menu-main">
                        <tr>
                            <td style="text-align: center; width: 100px">Читатель</td>

                            <!--Пользователь вводит штрих-код!-->
                            <td><input type="text" style="width: 100px" name="reader_barcode" id="qwerty" maxlength="8"></td>

                            <!--Далее должна вывестись полученная из БД информация!-->
                            <td style="width: 300px">
                                                        <br>Фамилия: <div id="last_name"></div></br>
                                                            <br>Имя: </br>
                                                            <br>Отчество: </br>
                            </td>
                        </tr>
                        <tr>
                        <td colspan="3"><input type="submit" style="width:100%; height:35px;" value="Поиск читателя по штрих-коду" name="findreaderbtn" id="sendAjax"></td>
                        </tr>
                </form>

<script type="text/javascript">
   
        function runajax()
        {
            var reader_barcode = $("#qwerty").val();
            $.ajax({
             type: "POST",
             data: "reader_barcode=" + reader_barcode,
             url: "ajax/finduser",
             dataType: "json",
             success: function(data)
             {
                var temp = data.user_last_name;
                $("#last_name").text(temp);
             },
             error:  function(xhr, str){
                alert('Возникла ошибка: ' + xhr.responseCode);
            }
            })
        }
        $(document).ready(function(){
            $("#sendAjax").click(runajax);
        });
</script>
Функция выборки из массива.
PHP:
    public function action_finduser()
    {
            $reader_barcode = Arr::get($_POST, 'reader_barcode', '');
            $data = ORM::factory('Adduser')
                                ->where('user_barcode', '=', $reader_barcode)
                                ->find_all();
       
            echo json_encode($data);
    }
P.S. В приведённом коде в браузере я должен получить только лишь одно значения из таблицы, это user_last_name, но вообще мне нужна вся строка, т.е. массив значений отправить обратно в браузер.
Зараннее благодарен!
 
Последнее редактирование:

Здыхлик

Kohaner
Команда форума
Где вопрос? Где проблема?

> происходит выборка из бд в массив, но в браузер ничего не возвращается

Наверное, что-то посередине не так, да?
 

Lobezki

Новичок
Здыхлик, да. У меня предположение, что echo json_encode($data); либо ничего не передаёт, либо передаёт не в том виде.
 

Здыхлик

Kohaner
Команда форума
А что, слабо подсмотреть в консольке браузера, какие запросы/ответы ходят?
 

Здыхлик

Kohaner
Команда форума
Это было бы слишком просто. Давайте так. В каком формате данные ожидаются от сервера, и в каком отдаются? И вообще, что отдается? Это все есть в консольке, вкладка network
 

Lobezki

Новичок
Проверил кое-что и выяснил, что не происходит выборка из бд. Оо. Ведь если запускать таким образом выборку из контролера страницы, то всё работает.

У меня есть таблица users. В ней есть поля: user_last_name, user_first_name, user_barcode и т.д.

Если я правильно понял, то данные отсылаются в формате gzip.
 
Последнее редактирование:

Lobezki

Новичок
Теперь если в массив $data добавлю отдельно новый индекс, и помещу значение напр. 111,

$data['key_ex'] = '111';

То он высвечивает при алерте: [object Object].

UPD:

Теперь выявил интересную вещь, при таком запросе, мне вообще ничего не выдаёт на странице:

PHP:
    public function action_finduser()
    {

        $reader_barcode = Arr::get($_POST, 'reader_barcode', '');
        $readers = ORM::factory('Adduser')
                                ->where('user_barcode', '=', 34)
                                ->find_all();
  
        $arr = array(
            "foo" => $readers->user_last_name,
            "bar" => "foo",
            "fob" => $reader_barcode,
        );
        $res['key'] = '111';
                  
    echo json_encode($arr);
    }



При следующем запросе alert выдаёт:



P.S. в $reader_barcode я поместил 234234;

PHP:
    public function action_finduser()
    {

        $reader_barcode = Arr::get($_POST, 'reader_barcode', '');
  
        $arr = array(
            "foo" => "",
            "bar" => "foo",
            "fob" => $reader_barcode,
        );
        $res['key'] = '111';
                  
    echo json_encode($arr);
    }
И да, вообще в Network мне пишет 304 Not Modified напротив jquery.
 
Последнее редактирование:

Lobezki

Новичок
Удалось вытащить, ошибку, которую пишет кохана: http://s7.hostingkartinok.com/uploads/images/2014/09/c1f3a0ff2c0c9637d5657b5961707ec4.jpg Как я понял из бд всё вытягивается, только всему что вытягивается в итоге присваивается значение null.

P.S. массив выгиявается из бд, затем всем его значениям присваевается null, а затем пустой массив отправляется обратно на страницу. И вообще на странице при аллерте выдаётся, как объект в виде {},т.е. внутри должны быть значения, но т.к. всё пусто, то о каких значениях может идти речь.
 
Последнее редактирование:

Здыхлик

Kohaner
Команда форума
PHP:
$readers = ORM::factory('Adduser')
                                ->where('user_barcode', '=', 34)
                                ->find_all();
 
        $arr = array(
            "foo" => $readers->user_last_name,
            "bar" => "foo",
            "fob" => $reader_barcode,
        );
А теперь скажите мне, какой объект возвращается методом find_all()? Может ли у него быть свойство user_last_name? Или тут что-то неправильно, как думаете?
 

Lobezki

Новичок
А теперь скажите мне, какой объект возвращается методом find_all()? Может ли у него быть свойство user_last_name? Или тут что-то неправильно, как думаете?
Не имею понятия. Вообще на странице с контроллером такая конструкция работает на ура. Только данные мне надо получать без перезагрузки страницы. Но раз вы спрашиваете, наверное в этом кроется ошибка?
Я пробовал также вытягивать нужный мне массив и при помощи прямого mysql-запроса, а затем через mysql_fetch_assoc переводил в ассоциативный массив, но всё равно в браузер массив попадает пустым.
 

Lobezki

Новичок
Попробуйте таки почитать документацию. Не имею никакого интереса делать за человека его работу.
Я не говорю что не хочу сам искать. Я нигде не нашел описания этого метода. Ни на оф.сайте ни в др. источниках.
 
Последнее редактирование:

Здыхлик

Kohaner
Команда форума
OMG. Да ладно? Лет 5 назад еще можно было пожаловаться на доку, но не сейчас.
 

Lobezki

Новичок
Здыхлик, я погарячился. Нашел информацию написано: Finds multiple database rows and returns an iterator of the rows found. Что за итератор я не знаю. Точнее что такое итератор я знаю, но в данном контексте не понимаю.
 

Здыхлик

Kohaner
Команда форума
Слушайте, я не собираюсь рассказывать азы кохановского ORM, которые разжеваны на обоих языках, и не раз.
 

Lobezki

Новичок
Здыхлик, короче вывести нужную мне информацию из БД всё-таки удалось при помощи прямого mysql. Оказывается ему там прав не хватало. Опять же странно. Везде хватает, а при вызове из Ajax'a... Но и вместе с этим выяснил, что в Ajax.php переменная, приходит с нулём Оо. Я в шоке, как так. Т.е. что не пишу, всё равно нулю равно.
 

Lobezki

Новичок
Здыхлик, всё решил))) всё работает, забыл вернуть валидирование в javascript'e. Правда через ОРМ всё равно не хочет. Всё равно спасибо тебе!
 

Lobezki

Новичок
Только теперь результат появляется на долю секунды и исчезает. А ajax в отладчике пишет, что false.
 

Здыхлик

Kohaner
Команда форума
То есть вместо изучения инструмента решил попробовать с другого входа? ну-ну ))
 
Сверху