Другие языки программирования и технологии

Как обеспечить кроссбраузерность запроса на AJAX?

Суть скрипта - select передает в файл t.php POST запрос - там запрос обрабатывается и возвращаеться назад и становиться еще одним select.

Данный скрипт поддерживает только IE и только до 8 версии. В других браузерах не работает.

____________________________________________
Сначала скрипт

script language="JavaScript"

var reqt;
function createRequestObject()
{ var request;
if(!request)
{try { request = new ActiveXObject('Microsoft.XMLHTTP'); }
catch (e){} } if(!request) { try { request = new ActiveXObject('Msxml2.XMLHTTP'); }
catch (e){} } if(!request) { try { request = new XMLHttpRequest(); }
catch (e){} } return request; }
function processReqChanget()
{ if (reqt.readyState == 4)
{ if (reqt.status == 200)
{ cont = document.getElementById('gor');
cont.innerHTML = reqt.responseText; }
else
{alert("There was a problem retrieving the XML data:\n" + reqt.statusText); }}}

function loadXMLDoct(url)
{ text = document.getElementById('tip').value;
if (reqt = createRequestObject())
{reqt.onreadystatechange = processReqChanget;
reqt.open("POST", url, false);
reqt.setRequestHeader('Content-Type',"application/x-www-form-urlencoded");
reqt.send("regt="+text); } }

/script
__________________________________________________
Потом на 1 странице из select передаем в файл t.php запрос

select size='1' onchange=\"loadXMLDoct('t.php')\" name='tip' class='tan' style='width:220' >
<option>- Выберите тип -</option>";
$result = mysql_query("SELECT * FROM tip ORDER by tiprus",$db);
for($i = 0; $i < mysql_num_rows($result); $i++)
{ $v = mysql_fetch_array($result);
echo "<option>$v[tiprus]</option>";
}

_______________________________________________________
Сам файл t.php

header("Content-type: text/plain; charset=windows-1251");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
$regt=$_POST['regt'];
$query = mysql_query ("SELECT * FROM tipR WHERE tip = '$regt'",$db);

echo "Модель:<select>";
for($i = 0; $i < mysql_num_rows($query); $i++)
{ $v = mysql_fetch_array($query);

echo "<option> $v[model]</option>"; }

echo "</select><input><input>";

___________________________________________________________________
И потом вывод на 1странице
Определение типа XMLHTTP (должно работать в Netscape (и подобных, типа Лиса) , MS (и авант) , Opera по крайней мере - у меня работало) ) на всех тестил - все отлично)
function req()
{
var A;
var msxmlhttp = new Array(
'Msxml2.XMLHTTP.5.0',
'Msxml2.XMLHTTP.4.0',
'Msxml2.XMLHTTP.3.0',
'Msxml2.XMLHTTP',
'Microsoft.XMLHTTP');
for (var i = 0; i < msxmlhttp.length; i++)
{
try
{
A = new ActiveXObject(msxmlhttp);
}
catch (e)
{
A = null;
}
}
if(!A && typeof XMLHttpRequest != "undefined")
A = new XMLHttpRequest();
return A;
}
а потом писать типа
reqt = req();
reqt.open ...и так далее

И, кстати, если уж и делать кроссплатформенным :
определение объекта делай так

((document.all)?document.all['ТУТ ИДЕНТИФИКАТОР']:document.getElementById('ТУТ ИДЕНТИФИКАТОР'))

. Не все браузеры могут выбирать объект по айди
СЗ
Сергей Зверьков
694
Лучший ответ
мдяяяя.. говорила мне мама -- УЧИСЬ !!!
Shuhrat Sattarov
Shuhrat Sattarov
87 931
почитав ответы на этот вопрос (и на первую версию Вашего вопроса) создалось такое впечатление, что у Вас "в других браузерах" что-то не настроено как следует...
В ASP.NET пддержка браузер осуществляется в библиотеке ScriptManager, возможно вам стоит в ней покопатся.
function req()
{
var A;
var msxmlhttp = new Array(
'Msxml2.XMLHTTP.5.0',
'Msxml2.XMLHTTP.4.0',
'Msxml2.XMLHTTP.3.0',
'Msxml2.XMLHTTP',
'Microsoft.XMLHTTP');
for (var i = 0; i < msxmlhttp.length; i++)
{
try
{
A = new ActiveXObject(msxmlhttp);
}
catch (e)
{
A = null;
}
}
if(!A && typeof XMLHttpRequest != "undefined")
A = new XMLHttpRequest();
return A;
}

reqt = req();
reqt.open
до вечера я вам напишу отлаженный код....