Запрос к Mysql

  • Автор темы Paster
  • Дата начала
P

Paster

Гость
#1
Всем доброго времи суток...

Хочу сделать так: после загрузки страницы через определенное время javascript делается запрос к базе mySQL, берет из нее данные и заносит изменения на страницу, НЕ ПЕРЕЗАГРУЖАЯ ее.
Желательно ограничиться javascript, PHP, mySQL.

буду очень благодерен за Вашу помощь...
 
P

Paster

Гость
#6
ключевое слово ajax
еще более точное XMLHttpRequest
для начала http://ru.wikipedia.org/wiki/XMLHttpRequest
Спасибо большое. Прочитал про XMLHttpRequest на вике.
После этого нашел пример http://www.webmascon.com/topics/technologies/13a.asp
Сделал по аналогии скрипт, но все равно вывести данные из MySQL не получается=(.

Вот то, что я написал:
Код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Пример</title>
<script language="JavaScript" type="text/javascript">
function GetNewVars(name,text,date)
{
document.getElementById('name').innerHTML = name;
document.getElementById('text').innerHTML = text; 
document.getElementById('date').innerHTML = date; 
};

function processReqChange() 
{
if (req.readyState == 4) 
{
if (req.status == 200) 
{
response = req.responseXML.documentElement;
method = response.getElementsByTagName('method')[0].firstChild.data;
name = response.getElementsByTagName('name')[0].firstChild.data;
text = response.getElementsByTagName('text')[0].firstChild.data;
date = response.getElementsByTagName('date')[0].firstChild.data;

eval(method + ' (name,text,date)');
};
};
};

function loadXMLDoc(url) 
{
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send(null);
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send();
};
};
};

function Timer()
{
Second--;
document.getElementById('time').innerHTML = Second;
if (Second == Update)
{Update = Second - 10;
id++;
url = 'http://localhost/js_test.php?id='+id;
loadXMLDoc(url);
};
};	

Second = 60;
Update = Second - 10;
id = 1;

interval = setInterval(Timer,1000);
</script>
</head>

<body>

<div id='time'></div>
<div id='name'></div>
<div id='text'></div>
<div id='date'></div>

<script type="text/javascript">document.getElementById('time').innerHTML = Second;</script>
</body>
</html>
// Файл test.php делает отсчет времени. На каждой 10й секунде должен происходить запрос к базе и данные из нее отображаться в тегах "div"

Код:
<?php 
include("blocks/connect.php");
$id = $_GET["id"];
$id = trim($id);
$r_info = mysql_query("SELECT * FROM news WHERE id = $id LIMIT 1");
$m_info = mysql_fetch_array($r_info);
echo ('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>');
echo("<response>");
echo("<name>".$m_info["name"]."</name>");
echo("<text>".$m_info["text"]."</text>");
echo("<date>".$m_info["date"]."</date>");
echo("</response>");

?>
// Файл js_pest.php обрабатывает значение идентификатора отправленного методом GET и вытаскивает из базы новость по id. (По крайней пере он должен это делать)

При тестировании на IE он выдает ошибку:
IE сказал(а):
Строка:21
Символ: 4
Ошибка: 'response' есть null или не является объектом
Тестировал "js_test.php" напрямую, выдает, по моему то, что нужно.

Помогите мне, пожалуйста. Я уже голову себе сломал%)
PS Оба предоставленные мною скрипта были написаны только, чтобы продемонстрировать эту ошибку. Они протестены, и суть ошибки такая же, как и в основном скрипте, с которым я работаю.
PPS include("blocks/connect.php"); здесь происходит соединение с базой. Оно точно работает корректно.
 
A

alexdrob

Гость
#7
на первый взгляд функция function processReqChange() не сможет обратится к обьекту req с функции function loadXMLDoc(url).
добавь после строки
<script language="JavaScript" type="text/javascript">
строку
var req;
 
A

alexdrob

Гость
#9
ты получаешь элемент getElementsByTagName('method')
но в твоём пхп файле нет элемента method
и переменная с именем date не очень удачна, есть зарезарвированная функция date может конфликт быть