Remote Scripting и PHP. Возможно?

Yurik

/dev/null
Remote Scripting и PHP. Возможно?

Технология ASP и броузер IE5 предлагают использование синхронных и асинхронных вызовов серверных "методов" без перезагрузки страниц (Remote scripting). Работает это дело благодаря java-апплету, который при определенном событии запускается из javascript и создает фоновое прокси подключение. Потом (при синхронном вызове) определенные переменные из серверного скрипта стают доступными в js. При асинхронном вызове мы просто оповещаем сервер о каком то событии.
В интранет приложениях это, на мой взгляд, довольно ефективное средство.

Возможно ли использование той же технологии (или есть какая альтернатива) под Unix/Apache/PHP сервер???
 

Mammoth

Guest
Ты спрашиваешь, можно ли использовать Java под Unix?
 

Yurik

/dev/null
java-апплет там запускается в експлорере, именно он открывает прокси сединение.

Вся соль по-моему, кроется в том, как сервер ответит на этот запрос, там наверно не
Код:
HTTP/1.0 200 OK
Content-type: text/html; charset....
и т.д.
а какой то особый интерфейс, благодаря которому этот java-апплет получает значения переменных от сервера и передает их назад в javascript (из которого этот <applet> и стартовал), где мы можем их дальше юзать (например для проверки форм)

Если удастся написать соответствующый пхп обработчик, по-моему, remote-scripting в кармане.
 

Mammoth

Guest
ИМХО, вся соль в том, что как хочешь - так и обращайся к серверу. Хочешь - по HTTP, хочешь - напрямую через сокеты.
 

Yurik

/dev/null
что как хочешь - так и обращайся к серверу
ну это понятно по определению
Хочешь - по HTTP, хочешь - напрямую через сокеты
не нужны тут сокеты, все по HTTP валит, но какие там хедеры, контент-тип и содержание, я не знаю.

Если вы знаете как это сделать или какой интерфейс обмена данных (декомпилировать яву это выше моих сил), пожалуйста отзовитесь,

P.S. а чтобы узнать всю соль програмирования (можешь делать что сам захочеш) мне и тревожить господ-гуру не нужно.
 

Mammoth

Guest
Yurik, прости - как ты собираешься писать на жабе, не зная ее? Твой вопрос "какие там хедеры, контент-тип и содержание" я не понял. Где это "там"?
 

Ваня Куинджи

Guest
Ты можешь создать скрытый <iframe> , в который средствами явы будешь загружать тот или иной скрипт.
Так как у фреймов есть родительские и дочерние отношения, то из этого фрейма легко вернуть переменную в родительский.

типа parent._returnValue(my_var);
где значения подставляешь с помощью пыхпыха.

Но вот менять содержимое текущей страницы вряд ли удастся.
Только содержимое формуляров.
 

Crazy

Developer
Вопрос для внимательного прочтения: если мы уже используем яву, то нахрена нам какие-то невидимые фреймы? Нам достаточно URLConnection'а. :D
 

kvu

Guest
Все можно сделать без iframe и прочего.
Делается это достаточно просто через JavaScript и функции httpRequest (если пользовать Мозилу)
Идеология такая. Торчит скрипт у клиента, который через определенные промежутки времени в фоновом режиме запрашивает серверный скрипт коротким сообщением, на что получает от сервера ответ, который может быть помещен в любое место страницы без перезагрузки.
В такой схеме конечно инициатором получения информации является клиент.
 

Crazy

Developer
Есть мнение, что мозиллоориентированные технологии изначально обречены на весьма ограниченное применение... :)
 

kvu

Guest
Дак точно также сделано и на ИЕ
там только класс называется не httpRequest, а ActiveXObject("Msxml2.XMLHTTP").
остальное все так же.
 

Yurik

/dev/null
я не понял. Где это "там"?
Если Вы не в курсе о MS технологии Remote Scripting, можно просто не отвечать
Ты можешь создать скрытый <iframe>
Я это знаю и использую, но Remote Scripting в интранет приложениях меня заинтерисовал
Делается это достаточно просто через JavaScript и функции httpRequest (если пользовать Мозилу)
А где об этом поподробней?
 

Yurik

/dev/null
СТОП!!! При чем здесь вообще жаба. Remote scripting юзает какую-то стандартную (для ІЕ) ява библитеку (Rsproxy.class). Вызывается она из javascript, передает что-то серверу (на ASP) а результаты работы скрипта на сервере назад возвращаются в javascript. Java вообще нигде не фигурирует, ее для програмиста нету.
Проблема в том, что ASP (VBS) скрипты имеют поддержку этого всего, а можно ли ТО ЖЕ, но в PHP?! Может есть какой PEAR класс?
 

Yurik

/dev/null
Вот как это реализуется в javascript:
http://msdn.microsoft.com/msdn-files/026/000/008/Website/_ScriptLibrary/RS_htm.asp?frame=true

Вот хорошая статья о Remote Scripting:
http://prosto.pp.ru/Docum/DocumShow.asp?DocumID=88

А вот почему меня это вообще заинтересовало
Так как при вызове серверного скрипта текущая страница не покидается, то ее состояния сохраняется, а вместе с ней и состояние переключателей и глобальных переменных.
 

kvu

Guest
Работает под Мозилой и ИЕ
Вот php код
<?php
header("content-type: text/plain");
$a = $HTTP_POST_VARS["test"] + $HTTP_POST_VARS["test1"];

print $a;
exit();
?>
Вот HTML
<HTML>
<HEAD>
<TITLE>
</TITLE>
<SCRIPT language="Javascript">
//
// Browser Detection
//
isMac = (navigator.appVersion.indexOf("Mac")!=-1) ? true : false;
NS4 = (document.layers) ? true : false;
IEmac = ((document.all)&&(isMac)) ? true : false;
IE4plus = (document.all) ? true : false;
IE4 = ((document.all)&&(navigator.appVersion.indexOf("MSIE 4.")!=-1)) ? true : false;
IE5 = ((document.all)&&(navigator.appVersion.indexOf("MSIE 5.")!=-1)) ? true : false;
IE6 = ((document.all)&&(navigator.appVersion.indexOf("MSIE 6.")!=-1)) ? true : false;
ver4 = (NS4 || IE4plus) ? true : false;
NS6 = (!document.layers) && (navigator.userAgent.indexOf('Netscape')!=-1)?true:false;

IE5plus = IE5 || IE6;
IEMajor = 0;

if (IE4plus)
{
var start = navigator.appVersion.indexOf("MSIE");
var end = navigator.appVersion.indexOf(".",start);
IEMajor = parseInt(navigator.appVersion.substring(start+5,end));
IE5plus = (IEMajor>=5) ? true : false;
}
</SCRIPT>
<script>
function PostOrder(str)
{
if(IE6)
{
var httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
httpRequest.Open("POST", "test.php", false, null, null);
httpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
httpRequest.Send("test="+str+"&test1=20");
var response = httpRequest.responseText;
document.getElementById("str").childNodes[0].nodeValue=response;
}
else
{
var httpRequest = new XMLHttpRequest();
httpRequest.open("POST", "test.php", false, null, null);
httpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
httpRequest.send("test="+str+"&test1=20");
var response = httpRequest.responseText;
document.getElementById("str").childNodes[0].nodeValue=response;
}
}
</script>
</HEAD>
<BODY>
<div id='request' onClick=PostOrder(document.getElementById("str").childNodes[0].nodeValue)>Увеличить на 20: <span id='str'>8</span></div>
</BODY>
</HTML>
 

Pike

Guest
kvu,
Спасибо за работающий пример.
Только Яваскрипт уж больно старшный:)
Мусора много.

Вот все что надо:

<SCRIPT type="text/javascript">
function PostOrder(str){
if(document.all){
var httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
}else{
var httpRequest = new XMLHttpRequest();
}
httpRequest.open("POST", "test.php", false, null, null);
httpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
httpRequest.send("test="+str+"&test1=20");
var response = httpRequest.responseText;
document.getElementById("str").innerHTML=response;
}
</script>
 

kvu

Guest
Это я быстро сляпал из того что было, так что не ругайте.
 

Yurik

/dev/null
ActiveXObject("Msxml2.XMLHTTP");
как я понял, это нужно ещё установить msxml (около 1М инсталяха), тоесть метод подходит исключительно для интранет.
буду пока рыть в сторону родного для IE5+ remote scripting
 
Сверху