Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Исчезает текст из переменной. (https://javascript.ru/forum/misc/50185-ischezaet-tekst-iz-peremennojj.html)

Lobezki 16.09.2014 00:23

Исчезает текст из переменной.
 
Здравствуйте!
Делаю 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 не помогают.

Aetae 16.09.2014 02:14

//здесь вы полученные данные(объект) превращаете в строку(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) если не передан никуда дальше.

Lobezki 16.09.2014 09:03

Aetae, alert отрабатывает нормально. И var readerlastname = rese.user_last_name выводит мне всё как надо.

А вот объект, да никуда дальше не передаётся. Дело в том, что делал по примеру и в примере у человека всё отрабатывало. И что такое "собирается GC"?

https://www.youtube.com/watch?v=egdPcuBDPEE (после 9 мин)

tsigel 16.09.2014 09:28

Lobezki,
Цитата:

GC
Это сборщик мусора, который очищает память.

Aetae 16.09.2014 13:46

Lobezki, в приведённом примере rese.user_last_name не может выводить ничего. Либо врёте вы, либо пример.

Lobezki 16.09.2014 13:47

tsigel,
спасибо.

Брикопоинты показывают, что с содержимым объекта всё в порядке.

Lobezki 16.09.2014 13:51

Aetae, сейчас проверил, да действительно rese.user_last_name выводит только undefinied при alert'e. Сорри, вчера вечером уже затурканный был, вот и напутал. Но при data.user_last_name. Значение появляется на секунду и исчезает.

Aetae 16.09.2014 14:50

Где появляется и исчезает? В отладчике? Тогда см. выше. А если в #p1 - значит возможно где-то дублируется вызов функции.

Lobezki 16.09.2014 14:58

Aetae,
в #p1.

Я переименоввывал, всё равно та же ерунда. после алерта ajax в хроме(Network) пишет одно слово false.

Aetae 16.09.2014 15:06

Короче. С приведённым кодом всё в порядке. #p1 перезаписывается откуда-то ещё, либо повторным вызовом runajax.
http://learn.javascript.ru/play/sw5Xjc

Либо же вы всё-таки не добавили return false, и страница тупо перезагружается.


Часовой пояс GMT +3, время: 19:26.