обмен переменной из php и html файлом.

sickboy

Новичок
обмен переменной из php и html файлом.

Использую всем известную вещь:
PHP:
<script> 
var xmlDoc = null ; 

function http_request() 
{if (typeof window.ActiveXObject != 'undefined' ) 
{xmlDoc = new ActiveXObject("Microsoft.XMLHTTP"); 
xmlDoc.onreadystatechange = process ; 
} 
else 
{xmlDoc = new XMLHttpRequest(); 
xmlDoc.onload = process ; 
} 
xmlDoc.open("GET", "tail.php", true); 
xmlDoc.send(null); 
} 

function process() 
{if (xmlDoc.readyState == 4) 
{document.getElementById('res').innerHTML += xmlDoc.responseText ; 
} 
} 
</script> 
<body onload="http_request();timer = setInterval(http_request, 6000)"> 
<div id="res" style="border:0px;font-family:Verdana;font- size:11px;padding:10px;width:100%;height:300px;ove
rflow:auto;"> 
</div>
tail.php выводит периодически некую инфу в открытое окно браузера, также этот скрипт создает некоторое число, которое необходимо ему при последующем его исполнение, это число я пока сохраняю в файле, но это не очень удобно.
Хотелось бы сделать сделать так
xmlDoc.open("GET", "tail.php?var=1212", true);
но никак не могу сообразить, куда выводить html файл это число, ведь весь текст выводится в <div id="res"
 

bgm

&nbsp;
Если попытаться продраться сквозь путаницу твоего пояснения, то тебе требуется следующее: обратившись через JavaScript к php-скрипту получить не только кусок html для отображения в браузер, но и при последующем обращении к скрипту из этого окна использовать параметры, полученные при предыдущем обращении. Правильно? Если да, то ответ будет такой: ты можешь передавать эти параметры с помощью переменной javascript'a, который встраиваешь в "некую инфу", получаемую от своего tail.php.
 

sickboy

Новичок
Автор оригинала: bgm
Если попытаться продраться сквозь путаницу твоего пояснения, то тебе требуется следующее: обратившись через JavaScript к php-скрипту получить не только кусок html для отображения в браузер, но и при последующем обращении к скрипту из этого окна использовать параметры, полученные при предыдущем обращении. Правильно?
Да, верно.

Автор оригинала: bgm Если да, то ответ будет такой: ты можешь передавать эти параметры с помощью переменной javascript'a, который встраиваешь в "некую инфу", получаемую от своего tail.php.
Наверно да, но только я никак не могу понять как это сделать, вся информация из php скрипта (в нем стоит обычное echo) выводится в
<div id="res"
значит в php надо поставить еще одно echo $var, а вот куда и как его вывести?, передать эту переменную обратно в tail.php я думаю можно так:
tail.php?act=" + document.getElementById("var").value

?
 

bgm

&nbsp;
Тебе нужно добавить что-то вроде такой конструкции к общему "куску":
PHP:
echo "<script> var sPar = ".$var." </script>";
И использовать для формирования запроса переменную javascript sPar. Понятно?
 

sickboy

Новичок
да, понятно, сейчас протестирую

-~{}~ 25.08.06 19:20:

видимо одного понимания мне недостаточно.
сделал так в index.html
прописал:
xmlDoc.open("GET", "tail.php?cnt="cnt, true);
а в tail.php
как вы написали:
echo "<script> var cnt = ".$nofl_c."</script>\n";

но при вызове index.html получаю ошибку JS:
Object expected, line 28

это строка <body onload...

Простите за ламерские вопросы.
 

sickboy

Новичок
Автор оригинала: maxwell
Ошибка где-то в
function http_request()

я думаю что
надо заменить на
mlDoc.open("GET", "tail.php?cnt="+cnt, true);

но я могу ошибатся
теперь пишет 'cnt' is undefined
я думаю это связано с тем, что еще небыло запроса к tail.php и он не вывел строку
echo "<script> var cnt = ".$nofl_c."</script>\n";
если эта ошибка из-за этого, то наверно можно как-то написать: что если cnt не определена то она к примеру равна 5.
 

alekciy

Новичок
sickboy
также этот скрипт создает некоторое число, которое необходимо ему при последующем его исполнение,
index.html
Код:
<script>
var variable=0;
.....
xmlDoc.open("GET", 'tail.php?variable='+variable, true);
.....
</script>
tail.php (использую DOM API):
Код:
$script = $replyXML->createElement('script');
$script -> nodeValue = 'variable=10';
$root->appendChild($script);
Вопросы?

-~{}~ 26.08.06 05:01:

Автор оригинала: sickboy
теперь пишет 'cnt' is undefined
я думаю это связано с тем, что еще небыло запроса к tail.php и он не вывел строку
echo "<script> var cnt = ".$nofl_c."</script>\n";
если эта ошибка из-за этого, то наверно можно как-то написать: что если cnt не определена то она к примеру равна 5.
Тебе нормальный языком написали, что переменная cnt у тебе не определена, посылать нечего!
Что так трудно написать

Код:
<script>
var cnt=0;
</script>
?!?!?!?!
 

sickboy

Новичок
Автор оригинала: alekciy
sickboy
также этот скрипт создает некоторое число, которое необходимо ему при последующем его исполнение,
index.html
Код:
<script>
var variable=0;
.....
xmlDoc.open("GET", 'tail.php?variable='+variable, true);
.....
</script>
tail.php (использую DOM API):
Код:
$script = $replyXML->createElement('script');
$script -> nodeValue = 'variable=10';
$root->appendChild($script);
Вопросы?
Ваш код почему-то не работает,

Fatal error: Call to a member function createElement() on a non-object in tail.php on line 15
это на строке $script = $replyXML->createElement('script');
-~{}~ 26.08.06 05:01:

Автор оригинала: alekciy
Тебе нормальный языком написали, что переменная cnt у тебе не определена, посылать нечего!
Что так трудно написать

Код:
<script>
var cnt=0;
</script>
?!?!?!?!
это я догадался поставить, но теперь
xmlDoc.open("GET", "tail.php?cnt="+cnt, true);
всегда принимает значение 0
 

maxwell

artifex
Не знаю зачем var cnt = 0;
PHP:
  var cnt;
:D

это я догадался поставить, но теперь
xmlDoc.open("GET", "tail.php?cnt="+cnt, true);
всегда принимает значение 0
проверь когда ты присваиваешь значение этой переменной....
 

sickboy

Новичок
maxwell
а теперь все время undefined

-~{}~ 29.08.06 11:41:

Автор оригинала: maxwell
проверь когда ты присваиваешь значение этой переменной....
в начале файла index.html
PHP:
<script>
var xmlDoc = null ;
var cnt;
function http_request() {
...
-~{}~ 29.08.06 11:44:

в php как вы и писали ранее:
PHP:
echo "<script> var cnt = ".$nofl_c."</script>\n";
в index.html, так и осталось.
PHP:
xmlDoc.open("GET", "tail.php?cnt="+cnt, true);
 

bgm

&nbsp;
sickboy
Приведи результат выполнения этой строчки:
PHP:
echo "<script> var cnt = ".$nofl_c."</script>\n";
 

alekciy

Новичок
Автор оригинала: sickboy
Ваш код почему-то не работает,

Fatal error: Call to a member function createElement() on a non-object in tail.php on line 15
это на строке $script = $replyXML->createElement('script');
-~{}~ 26.08.06 05:01:
И не должен. Я приводил не конкретный код, а пример. Логику работы. Вы же не привили код PHP скрипта на сервер. А то что я написал это часть кода, без других функций конечно он и не будет работать. Я пытаюсь заставить вас подумать над логикой работы передача_переменной_php->html->php, а не привожу конкретный код.

Я вот понимаю логику (алгоритм) обмена переменными между JS и PHP поэтому сейчас вот написал код, в котором у меня переменные спокойно передаются туда-сюда без проблем.

-~{}~ 29.08.06 13:26:

Автор оригинала: sickboy
PHP:
echo "<script> var cnt = ".$nofl_c."</script>\n";
В свете xmlDoc.open("GET", "tail.php?cnt="+cnt, true); я бы лучше написал
PHP:
echo "<script> var cnt = ".$_GET['cnt']."</script>\n";
Потому как сдается мне, что вы в PHP все переменные перемещали и не то клиенту возращаете.
 

sickboy

Новичок
$ php -q tail.php
Код:
<script> var cnt = 240</script>
10.0.1.5 - - [29/Aug/2006:13:00:15 +0400] "GET /cgi/tail/tail.php HTTP/             1.1" 200 459 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET C             LR 1.1.4322; .NET CLR 2.0.50727)" <br>
 

sickboy

Новичок
Автор оригинала: alekciy
И не должен. Я приводил не конкретный код, а пример. Логику работы. Вы же не привили код PHP скрипта на сервер. А то что я написал это часть кода, без других функций конечно он и не будет работать. Я пытаюсь заставить вас подумать над логикой работы передача_переменной_php->html->php, а не привожу конкретный код.

Я вот понимаю логику (алгоритм) обмена переменными между JS и PHP поэтому сейчас вот написал код, в котором у меня переменные спокойно передаются туда-сюда без проблем.
а не могли бы привести ваш пример?, может быть и я стану понимать.

bgm
прочтал, но не осознал как мне решить мою задачу, с обменом значения переменной.
 

maxwell

artifex
Автор оригинала: sickboy
а не могли бы привести ваш пример?, может быть и я стану понимать.

bgm
прочтал, но не осознал как мне решить мою задачу, с обменом значения переменной.
Мой тебе совет, берешь готвую библиотеку (я юзаю prototype)
Читаешь документацию (по prototype мне нравится вот этот документик, он кстати с примерами)

И используешь Ajax.Request класс

JavaScript:
PHP:
function GetContent()
{
  var url = 'http://yourserver/yourphpscript.php';
  var pars = 'cnt=' + cnt;
  var myAjax = new Ajax.Request( url, { method: 'get', parameters: pars, onComplete: function_that_will_be_called}); 
}
function function_that_will_be_called(originalRequest)
{
  var answer = originalRequest.responseText;
}
В пхп коде можешь отдавать число как <cnt>1212</cnt> или как тебе удобнее
Потом уже парсишь полученную фигню и выдираешь оттуда свою переменную
 

sickboy

Новичок
Автор оригинала: maxwell
Мой тебе совет, берешь готвую библиотеку (я юзаю prototype)
Читаешь документацию (по prototype мне нравится вот этот документик, он кстати с примерами)

И используешь Ajax.Request класс

JavaScript:
PHP:
function GetContent()
{
  var url = 'http://yourserver/yourphpscript.php';
  var pars = 'cnt=' + cnt;
  var myAjax = new Ajax.Request( url, { method: 'get', parameters: pars, onComplete: function_that_will_be_called}); 
}
отличается не намного от моего.

PHP:
function function_that_will_be_called(originalRequest)
{
  var answer = originalRequest.responseText;
}
В пхп коде можешь отдавать число как <cnt>1212</cnt> или как тебе удобнее
Потом уже парсишь полученную фигню и выдираешь оттуда свою переменную
а вот как отпрасить, видимо для меня это останется загадкой, если с примерами выше я кое-как разобрался то тут вообще туго.
как я понимаю answer примет значение: <cnt>1212</cnt>, но туда я же видимо еще нужно вывести кусок лог-файла; например также <log>sometext</log>.
И как это разобрать по частям, ума не приложу.
 

alekciy

Новичок
sickboy
Ладно, видимо проблема для тебя достаточная сложная. Замечу, что для её решения нужно: знания по JS, DOM API JS, PHP время и терпение. Человек ты судя по все вполне культурный, посему пишу полность законченый код.

Имеем 3 файла. index.htm:
Код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Пересылка переменной</title>
<script type="text/javascript" src="ajax.js"></script>
</head>

<body>

<input type="button" onclick="getVar()" value="Переменная"><br>
<input type="button" onclick="enlarge()" value="Увеличить"><br>
<input type="button" onclick="sendData()" value="Послать переменную на сервер">
<div id="my_div"></div>

</body>
</html>
JS часть AJAX движка, ajax.js
Код:
var variable = 0;
function getVar() {
	alert('Переменная х = '+variable);
};
function enlarge() {
	variable++;
}
function httpRequest() {
	if (window.XMLHttpRequest) {
        requestObj = new XMLHttpRequest();
    } else {
    	requestObj = new ActiveXObject("Msxml2.XMLHTTP");
	};
};

function sendRequest (url) {
	httpRequest();
	requestObj.onreadystatechange = responseServer;
	requestObj.open('GET',url,true);
	requestObj.send(null);
};

function responseServer() {
    if (requestObj.readyState == 4) {
    	var status = requestObj.status;
    	if (status == 200) {
    		addScript();
    	} else {
    		alert('Ошибочный ответ сервера');
		};
    };
};

function sendData() {
	var url = 'index.php?variable='+variable;
	sendRequest (url);
};

function addScript() {
	var element = document.createElement('script');
	element.text = requestObj.responseText;
	var arrtibute_type = document.createAttribute('type');
	arrtibute_type.value = 'text/javascript';
	element.setAttributeNode(arrtibute_type);
	my_div.appendChild(element);
};
PHP часть движка, index.php
Код:
<?php
$x = $_GET['variable']+10;
print "variable = $x";
?>
 

maxwell

artifex
Автор оригинала: sickboy
отличается не намного от моего.


а вот как отпрасить, видимо для меня это останется загадкой, если с примерами выше я кое-как разобрался то тут вообще туго.
как я понимаю answer примет значение: <cnt>1212</cnt>, но туда я же видимо еще нужно вывести кусок лог-файла; например также <log>sometext</log>.
И как это разобрать по частям, ума не приложу.
Отличается, это только вызов класса :) сам класс в библиотеке.

answer примет значение ВСЕГО что отдаст php скрипт
пофиг, сообщение об ошибке или еще что...
как парсить "<cnt>1212</cnt>"
PHP:
  var str = answer;
  var pos1 = str.search("<cnt>");
  var pos2 = str.search("</cnt>"); 
  cnt = str.substring(pos1,pos2);
Видел что тебе уже ответили, но я свой ответ начал писать раньше, потом ушел на часик и вот дописал))

-~{}~ 30.08.06 00:27:

Замечу, что для её решения нужно: знания по JS, DOM API JS, PHP время и терпение.
:) нужна голова и руки
 
Сверху