Вызов PHP скрипта из JavaScript

KPD

Новичок
Вызов PHP скрипта из JavaScript

Здравсвуйте.

Возможно ли вызвать ПХП скрипт из Ява-Скрипта.

Вообще нужно сделать следующее
есть форма, пользователь её заполняет
по одному из полей заполняются другие, механизм нужно сделать такой
пользователь нажимает кнопку проверить форму, ява скрипт её проверяет, потом вызывает скрипт пхп который из БД получает нужные данные отдаёт их ява скрипту, а тот уже вставляет их в поля....

как вот такое можно сделать? и можно ли?
 

Фанат

oncle terrible
Команда форума
можно, но сложно.
получай нужные данные в невидимом фрейме или поп-ап окне.
 

Кром

Новичок
>как вот такое можно сделать? и можно ли?

Да, можно сделать. Надо писать код.
 

KPD

Новичок
а как?
У меня вот проблема только в том как высвать ПХП скрипт из под ява скрипта, чтобы ПХП скрипт вернёт данные в XML ну или в любом удобном вормате это не важно.

идея в том что ява скрипт дожен вызвать пхп скрипт, и просто считать из него данные как из текстового фала.... вот как это сделать?
 

MD

Guest
погуглись в сторону XMLHTTP .. можт полезного чего найдешь.
 

KPD

Новичок
я думал про это.
не очень хочется использовать ActiveX.

где можно найти описание этого Microsoft.XMLHTTP?
 

Фанат

oncle terrible
Команда форума
А как ты думаешь - это проблема гугля? :)

Ну хорошо, не хочешь гугль - почему бы тогда не посмотреть, как это сделано на другом сайте?
 

MiRacLe

просто Чудо
var HttpClient = null;
HttpClient = new ActiveXObject( "MSXML2.XMLHTTP.4.0" )
function SendHttpRequest( Url)
{
// прицепляем random-параметр чёб предотвратить кеширование браузером
Url += ( Url.indexOf( '?' ) > -1 ) ? '&rn=' + Math.random() : '?rn=' + Math.random();
HttpClient.open( "GET", Url, false );
HttpClient.send();
alert( "Server response :" + HttpClient.responseText );
}

// Где найти ? msdn (поиск там неплохой)
 

Фанат

oncle terrible
Команда форума
MiRacLe
а что будет, если на компьютере нет никакого MS?
 

MiRacLe

просто Чудо
Фанат
Автор оригинала: KPD
где можно найти описание этого Microsoft.XMLHTTP?
спросили - ответили

На случай отсутствия MS ты уже написал варианты -
<IFRAME frameborder="0" width="1" height="1" id="null_frame" name="content_hidden"></iframe>

<script>
obj = getElementById('null_frame');
obj.setAttribute('src',url,1);
alert(parent.frames['content_hidden'].document.body.innerHTML);
</script>
 

KPD

Новичок
в том то и дело что ничего:(
поэтому есть желание обойти использование MS.
 

KPD

Новичок
Очени интеренсо нижеследующий пример на моём компе работает, а на другом нет.
там пишется ошибка - НЕВОЗМОЖНО СОЗДАНИЕ ОБЪЕКТА СЕРВЕРОМ ПРОГРАММИРОВАНИЯ......

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
	<title>Untitled</title>

<script language="JavaScript">
var HttpClient = null; 
HttpClient = new ActiveXObject( "MSXML2.XMLHTTP.4.0" );

function SendHttpRequest( Url)
{
Url += ( Url.indexOf( '?' ) > -1 ) ? '&rn=' + Math.random() : '?rn=' + Math.random();
HttpClient.open( "GET", Url, false );
HttpClient.send();

return HttpClient.responseText;
}

function setForm(form)
{
	
	alert (SendHttpRequest('test.php?txt=qqq'));
	
	//txt = form.elements['txt1'].value;
	
	//form.elements['txt2'].value = SendHttpRequest('test.php?txt=' + txt);
	return false;
}

</script>


</head>

<body>


<form action="test.html" method="post" name="frm" onSubmit="
return setForm(this)
">

<input type="text" size="30" name="txt1"><br>
<input type="text" size="30" name="txt2"><br><br>
<input type="submit">
<input type="button" onclick="setForm('frm')" name="qqq" value="qqq">


</form>



</body>
</html>
-~{}~ 20.09.04 15:58:

пример с ифреймом очень странно работает:(
первый раз нажимаю кнопку, во врейме появляются данные, но алертом они не выводятся
второй раз нажимаю уже выводятся алертом, почему так???

PHP:
function setForm(form)
{
//txt = form.elements['txt1'].value;
//url = test.php?txt=' + txt;

obj = document.getElementById('null_frame');
obj.setAttribute('src','test.php?txt=qqq',1);
alert(parent.frames['content_hidden'].document.body.innerHTML);

	
	//txt = form.elements['txt1'].value;
	
	//form.elements['txt2'].value = SendHttpRequest('test.php?txt=' + txt);
	return false;
}
 

MiRacLe

просто Чудо
// inits MSHTML ole objects
try{
var test = new ActiveXObject( "MSXML2.DOMDocument.4.0" );
}catch( e ){

// try to install mshtml with owener control set
document.write(' <object id="MSXML4" classid="clsid: 88d969c0-f192-11d4-a65f-0040963251e5" codebase="/path/to/msxml4.cab#version=4,10,9404,0" type="application/x-oleobject" STYLE="display: none"></object>');
document.write(' <object id="MSXML4.HTML" classid="clsid: 88d969c6-f192-11d4-a65f-0040963251e5" codebase="/path/to/msxml4.cab#version=4,10,9404,0" type="application/x-oleobject" STYLE="display: none"></object>');

try{
var test = new ActiveXObject( "MSXML2.DOMDocument.4.0" );
}catch( e ){
// try to install mshtml ole object from microsoft site
document.write(' <object id="MSXML4" classid="clsid: 88d969c0-f192-11d4-a65f-0040963251e5" codebase="http://activex.microsoft.com/activex/controls/sdkupdate/msxml4.cab#version=4,10,9404,0" type="application/x-oleobject" STYLE="display: none"></object>' );
document.write(' <object id="MSXML4.HTML" classid="clsid: 88d969c6-f192-11d4-a65f-0040963251e5" codebase="http://activex.microsoft.com/activex/controls/sdkupdate/msxml3.cab#version=4,10,9404,0" type="application/x-oleobject" STYLE="display: none"></object>' );
}

} // end inits MSHTML ole objects


/path/to/msxml4.cab - путь у тебя на сервере - если не установиться оттуда - пойдёт качать с сайта M$

-~{}~ 20.09.04 16:05:

насчёт IFRAME хотел сразу написать ,но подумал что догадаешься

там тоже try-catch надо бы по уму сделать - данные могут не загрузиьтся к тому моменту когда должен выскочить alert (в случае с XMLHTTP обрабатывать это гораздо удобнее)

я делаю примерно следующее :

function ShowContent()
{
try
{
var obj = parent.document.getElementById('content_visible');
swapContent();
}
catch( e )
{
try
{
setTimeout('swapContent()',600);
}
catch(e)
{
document.location.reload();
}
}
}
 

KPD

Новичок
спасибо.
По поводу ифрейм я догадался что они не успевают загрузится, теб более не успеют загрузится у юзера на модеме:)

щас попробую и 1-й вариант и второй...

ты бы сам какой посоветовал выбрать?
 

MiRacLe

просто Чудо
тебе решать - 2-ой более "кроссбраузернее" , но геморойнее
1-ый очень удобен в реализации , но работает тока в IE ( по неподтверждённым данным в версиях не ниже 5.5 )
 

KPD

Новичок
а что у тебя делает эта функция?
swapContent()

меняет содержимое фрейма?
 

MiRacLe

просто Чудо
у меня она "перекладывает" содержимое невидимого фрейма в видимый

-~{}~ 20.09.04 16:22:

проще говоря в твоём случае там

alert(parent.frames['content_hidden'].document.body.innerHTML);
 
Сверху