Исчезает текст из переменной.
Здравствуйте!
Делаю ajax-запрос. Ко мне приходит ответ и сразу же через долю секунды пропадает со страницы. Ajax в отладчике в хроме пишет, что false. Не пойму как это. Прислать правильный рзультат, т.е. необходимую выборку из бд, показать на долю секунды на странице, а потом в отладчик написать false. <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>Фамилия: <p id="p1"></p></br> <br>Имя: </br> <br>Отчество: </br> </td> </tr> <tr> <td colspan="3"><input type="submit" style="width:100%; height:35px;" value="Поиск читателя по штрих-коду" name="findreaderbtn" id="senduserinfo"></td> </tr> </form> <script type="text/javascript"> function runajax() { var reader_barcode = $("#qwerty").val(); alert ("Данные уходят" + reader_barcode); $.ajax({ type: "POST", data: "reader_barcode=" + reader_barcode, url: "ajax/finduser", dataType: "json", success: function(data){ var rese = JSON.stringify(data); alert( "Прибыли данные: " + rese); var readerlastname = rese.user_last_name; $("#p1").text(readerlastname); } }) } $(document).ready(function(){ $("#senduserinfo").click(runajax); }); </script> public function action_finduser() { $reader_barcode = Arr::get($_POST, 'reader_barcode', ''); $int_reader_barcode = (integer) $reader_barcode; mysql_connect('localhost', 'root', 'root'); mysql_select_db("library"); $q = mysql_query("select user_first_name,user_last_name,user_patronymic from users where user_barcode = '$int_reader_barcode'"); $res = mysql_fetch_assoc($q); echo json_encode($res); } P.S. return false и return true не помогают. |
//здесь вы полученные данные(объект) превращаете в строку(stringify) var rese = JSON.stringify(data); //здесь alert отрабатывает нормально и показывает данные, не так ли? alert( "Прибыли данные: " + rese); //а вот здесь вы пытаетесь получить свойсво user_last_name у *!*строки*/!* rese, которое само собой не существует var readerlastname = rese.user_last_name; //в #p1 пишет undefined $("#p1").text(readerlastname);Должно быть: var readerlastname = *!*data*/!*.user_last_name; А по поводу исчезновения в отладчике могу предположить, что вы не научились пока пользоваться breakpoint'ами. Объект с данными же существует только на момент работы функции и исчезает(собирается GC) если не передан никуда дальше. |
Aetae, alert отрабатывает нормально. И var readerlastname = rese.user_last_name выводит мне всё как надо.
А вот объект, да никуда дальше не передаётся. Дело в том, что делал по примеру и в примере у человека всё отрабатывало. И что такое "собирается GC"? https://www.youtube.com/watch?v=egdPcuBDPEE (после 9 мин) |
Lobezki,
Цитата:
|
Lobezki, в приведённом примере rese.user_last_name не может выводить ничего. Либо врёте вы, либо пример.
|
tsigel,
спасибо. Брикопоинты показывают, что с содержимым объекта всё в порядке. |
Aetae, сейчас проверил, да действительно rese.user_last_name выводит только undefinied при alert'e. Сорри, вчера вечером уже затурканный был, вот и напутал. Но при data.user_last_name. Значение появляется на секунду и исчезает.
|
Где появляется и исчезает? В отладчике? Тогда см. выше. А если в #p1 - значит возможно где-то дублируется вызов функции.
|
Aetae,
в #p1. Я переименоввывал, всё равно та же ерунда. после алерта ajax в хроме(Network) пишет одно слово false. |
Короче. С приведённым кодом всё в порядке. #p1 перезаписывается откуда-то ещё, либо повторным вызовом runajax.
http://learn.javascript.ru/play/sw5Xjc Либо же вы всё-таки не добавили return false, и страница тупо перезагружается. |
Часовой пояс GMT +3, время: 14:42. |