 3
 3
 
AJAX подгрузка данных.
#1
Отправлено 22 Июль 2014 - 20:00
Подскажите пожалуйста простой пример, когда данные с КБ, допустим, с какой то таблицы, будут обновляться в представлении без перезагрузки страницы? Как такое сделать? Самый наипростейший пример?..
Заранее благодарю!!!
#2
Отправлено 23 Июль 2014 - 09:32
function AjaxViborka(){
    $.ajax({
	   url: "path/to/ajax/file.php",
	   type: "POST",
	   data: { Name : 'Имя, которое проверить надо' },
   }).done(function(otvet_php) {
		 if (otvet_php == 1) {  location.reload();  }
   });
}
То какой адрес отображать тут:url: "path/to/ajax/file.php",
#3
Отправлено 23 Июль 2014 - 09:46
$sqlQuery = "SELECT f2640 as test FROM ".DATA_TABLE."210 ORDER BY add_time DESC LIMIT 10"; 
$result = mysql_query($sqlQuery);
while ($row = sql_fetch_array($result))
  {
    $data['test'] = $row['test'];
    $lines[] = $data;  
  }
$smarty->assign("lines", $lines);
Простейшее отображение этих данных (в отображении):
{foreach from=$lines item=data}
{$data.test}<br>
{/foreach}
Вопрос в следующем. Как теперь эти данные получать асинхронно(без перезагрузки страницы), через каждые 3 секунды?..
#4
Отправлено 23 Июль 2014 - 10:15
function show_data()  {
  $.ajax({
		dataType: "html",
		url: "path/to/ajax/file.php",
		type: "POST",
		data: { Name : 'Имя, которое проверить надо' },
		success: function(html){
		   $("#div_data").html("........ваш вывод информации .......");
		}
  });
}
А в представление вставьте сам скрипт<script>
		// отправляем данные функцией show_online через интервал времени timeInt
		var timeInt=3000;
		show_data();
		setInterval('show_data()',timeInt);
</script>
Непосредственно в file.php делаете запрос к базе и в завершаете его echo с результатом обработки.
					
					Творческая группа "ТАВР".
www.TAVR.pro Художественная ковка, металлоконструкции.
www.СтолМет.рф Складные столы, стулья и системы для их хранения
#5
Отправлено 23 Июль 2014 - 10:16
#6
Отправлено 23 Июль 2014 - 10:18
 dolphin (23 Июль 2014 - 10:16) писал:
dolphin (23 Июль 2014 - 10:16) писал:
url: "path/to/ajax/file.php",
Творческая группа "ТАВР".
www.TAVR.pro Художественная ковка, металлоконструкции.
www.СтолМет.рф Складные столы, стулья и системы для их хранения
#7
Отправлено 23 Июль 2014 - 10:22
function AjaxViborka(){
    $.ajax({
		   url: "path/to/ajax/file.php",
		   type: "POST",
		   data: { Name : 'Имя, которое проверить надо' },
   }).done(function(otvet_php) {
				 if (otvet_php == 1) {  location.reload();  }
   });
}
Это взято с интернета с желанием разобрать что к чему.
Давайте начнем сначала.
Задача: в представлении без перезагрузки страницы отображать 10 крайних записей с какой нибудь таблицы (обновляя их каждые 3 секунды).
#8
Отправлено 23 Июль 2014 - 10:36
 dolphin (23 Июль 2014 - 10:22) писал:
dolphin (23 Июль 2014 - 10:22) писал:
Задача: в представлении без перезагрузки страницы отображать 10 крайних записей с какой нибудь таблицы (обновляя их каждые 3 секунды).
datatype - вид возвращаемых данных. В данном случае html.
url - это строка расположения php-файла на стороне сервера, в котором происходит выборка данных из БД и передача их на сторону клиента, т.е. на Ваш компьютер в браузер.
success - если запрос прошел успешно, выполняется функция из этой строки. Здесь вы можете обработать полученный от php-файла ответ и вывести его в удобном для Вас месте и виде.
type - вид запроса через get или post.
JS код, который прописан ниже. запускает функцию каждые три секунды.
<script>
function show_data()  {
  $.ajax({
	 dataType: "html",
	 url: "path/to/ajax/file.php",
	 type: "POST",
	 success: function(html){
		$("#div_data").html("........ваш вывод информации .......");
	 }
  });
}
// отправляем данные функцией show_online через интервал времени timeInt
var timeInt=3000;
show_data();
setInterval('show_data()',timeInt);
</script>
					
					Творческая группа "ТАВР".
www.TAVR.pro Художественная ковка, металлоконструкции.
www.СтолМет.рф Складные столы, стулья и системы для их хранения
#9
Отправлено 23 Июль 2014 - 10:39
 andibrag (23 Июль 2014 - 10:36) писал:
andibrag (23 Июль 2014 - 10:36) писал:
#10
Отправлено 23 Июль 2014 - 10:55
 dolphin (23 Июль 2014 - 10:39) писал:
dolphin (23 Июль 2014 - 10:39) писал:
Почему нет? Вместо пути к file.php задаете путь к вашему представлению, с каким-нибудь доп.параметром, например "ajax=1". Соответственно, в обработке данных добавляете код под условие if ($_REQUEST['ajax']) {// тут код обработки аякс запроса}
#11
Отправлено 23 Июль 2014 - 10:57
#12
Отправлено 23 Июль 2014 - 11:02
if ($_REQUEST['ajax'] == 1) {
$sqlQuery = "SELECT f2640 as test FROM ".DATA_TABLE."210 ORDER BY add_time DESC LIMIT 10"; 
$result = mysql_query($sqlQuery);
while ($row = sql_fetch_array($result))
  {
    $data['test'] = $row['test'];
  }
}   
В отображении:
<script>
  function show_data() {
    $.ajax({
	  dataType: "html",
	  url: "edit_php.php?report=460&ajax=1",
	  type: "POST",
	  success: function(html){
	    $("#div_data").html("$data['test']");
	    }
    });
  }
// отправляем данные функцией show_online через интервал времени timeInt
  var timeInt=3000;
  show_data();
  setInterval('show_data()',timeInt);
</script>
<div id="div_data"></div>
Результат:
$data['test']
P. S. Что не так?
 
					
					#13
Отправлено 23 Июль 2014 - 11:06
Абстрагируйтесь от того что у вас скрипт запроса сейчас включен в "обработку данных" представления, по сути этот тот же file.php из примера, никак не связанный с остальным кодом.
#14
Отправлено 23 Июль 2014 - 11:07
 у меня ведь возвращается массив с данными?
 у меня ведь возвращается массив с данными?  
					
					#15
Отправлено 23 Июль 2014 - 11:11
Еще раз (может не прочли, дописывал):
Цитата
Фрагмент с обработкой запроса никак не связан с выводом в отчет, это абсолютно отдельный поток данных!
По этой причине кстати и exit должен быть в его конце, чтобы выполнение дальше не пошло, иначе у вас весь отчет вылезет в ajax ответ.
#16
Отправлено 23 Июль 2014 - 11:14
 
  
  Вы меня вообще запутали
  Вы меня вообще запутали  
					
					#17
Отправлено 23 Июль 2014 - 11:17
Подготовим данные:
if ($_REQUEST['ajax'] == 1) {
$sqlQuery = "SELECT f2640 as test FROM ".DATA_TABLE."210 ORDER BY add_time DESC LIMIT 1"; 
$result = mysql_query($sqlQuery);
while ($row = sql_fetch_array($result))
  {
    $x = $row['test'];
    return $x;
  }
}   
Всё верно тут?...
					
					#18
Отправлено 23 Июль 2014 - 11:18
<script>
  function show_data() {
    $.ajax({
	  dataType: "html",
	  url: "report.php?report=460&ajax=1",
	  type: "POST",
	  success: function(html){
	    $("#div_data").html("$x");
	    }
    });
  }
  var timeInt=3000;
  show_data();
  setInterval('show_data()',timeInt);
</script>
<div id="div_data"></div>
а тут мы получим этот $x. Всё верно?
					
					#19
Отправлено 23 Июль 2014 - 11:21
if ($_REQUEST['ajax'] == 1) {
$sqlQuery = "SELECT f2640 as test FROM ".DATA_TABLE."210 ORDER BY add_time DESC LIMIT 1"; 
$result = mysql_query($sqlQuery);
while ($row = sql_fetch_array($result))
  {
    $x = $row['test'];
  }
  return $x;
  exit;
}   
					
					#20
Отправлено 23 Июль 2014 - 11:23
1. То что вы выводите в отчет из подготовки данных и отображения - это привычная всем html страница целиком со всеми заголовками, она непосредственно отображается в браузере, когда вы вводите адрес отчета, либо переходите к нему по ссылке, либо выполняете какие-то действия по отправке формы (например, поменяли период или менеджера в шапке отчета).
2. То что вы запрашиваете через аякс, к стандартному выводу в браузер никакого отношения не имеет!! Это отдельный, скрытый запрос к серверу из js-скрипта, ВНЕ браузера, с целью получить какие-то данные, грубо говоря в виде строки простого текста. Потом, этот текст должна обработать функция, которую вы задали в запросе из js. Никаких передач в smarty и отображение там не надо.
Так понятнее стало?
Поэтому собственно и обрабатывать запрос должен абсолютно отдельный скрипт, или его эмуляция в подготовке данных, но со СВОИМ выводом и exit'ом в конце, т.е как совершенно независимый кусок кода.
Количество пользователей, читающих эту тему: 5
0 пользователей, 5 гостей, 0 анонимных



 
				
				 
				
				










