есть такой себе маленький классик...
function ajax()
{
this.request;
this.cache=new Array();
this.cache.method=new Array();
this.cache.url=new Array();
this.cache.request_vars=new Array();
this.cache.status_element=new Array();
this.ajaxVersions=new Array("MSXML2.XMLHTTP.6.0",
"MSXML2.XMLHTTP.5.0",
"MSXML2.XMLHTTP.4.0",
"MSXML2.XMLHTTP.3.0",
"MSXML2.XMLHTTP",
"Microsoft.XMLHTTP");
this.errors=new Array();
this.last_status_element;
}
ajax.prototype.createAjax=function()
{
if (window.XMLHttpRequest)
{
try
{
this.request=new XMLHttpRequest();
}
catch (e) {}
}
else if (window.ActiveXObject)
{
for (i=0;i<this.ajaxVersions.length;i++)
{
try
{
this.request=new ActiveXObject(this.ajaxVersions[i]);
}
catch (e)
{
if (this.ajaxVersions.length==i)
{
this.error.push("Невозможно создать ajax объект: "+e.toString());
}
}
if (this.request)
{
break;
}
}
}
}
ajax.prototype.send_request=function(method,url,request_vars,status_elem_id)
{
this.cache['method'].push(method);
this.cache['url'].push(url);
//if (request_vars)
//{
//request_vars=encodeURIComponent(request_vars);
//}
this.cache['request_vars'].push(request_vars);
this.cache['status_element'].push(document.getElementById(status_elem_id));
if (this.request)
{
try
{
if ((this.request.readyState==4 || this.request.readyState==0) && this.cache['url'].length>0)
{
cache_entry=new Array();
cache_entry['method']=this.cache['method'].shift();
cache_entry['url']=this.cache['url'].shift();
cache_entry['request_vars']=this.cache['request_vars'].shift();
this.last_status_element=this.cache['status_element'].shift();
var self=this;
var self_element=this.last_status_element;
this.request.onreadystatechange=function () {self.get_response(self,self_element)};
this.request.open(cache_entry['method'],cache_entry['url'],true);
this.request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
this.request.send(cache_entry['request_vars']);
}
}
catch (e)
{
this.errors.push("Невозможно отправить данные на сервер: "+e.toString());
}
}
else
{
this.errors.push("Не создан объект для отправки данных на сервер.")
}
}
ajax.prototype.get_response=function (self,self_element)
{
try
{
if (self.request.readyState==4)
{
if (self.request.status==200)
{
self.last_status_element.innerHTML='';
var response=eval("("+self.request.responseText+")");
var element;
var element_content;
for (i=0;i<response.id.length;i++)
{
if (response.label[i]=='d')
{
eval(response.content[i]);
}
else
{
element=document.getElementById(response.id[i]);
element.innerHTML=response.content[i];
}
}
}
setTimeout('xmlhttp.send_request()',500);
}
else
{
self_element.innerHTML='<div align="center"><img src="ajax/wait.gif" border="0"> Загрузка...</div>';
}
}
catch (e)
{
self.errors.push("Невозможно прочитать ответ: "+e.toString());
}
}
var xmlhttp=new ajax();
xmlhttp.createAjax();
который типо аякс)))) и написанный с применением фрэймворка прототайп ,как вы могли уже заметить, дорогие читатели.
но, у этого класса есть небольшой (ну смотря с какой стороны постомреть мож и большой) глюк, он заключается в том, что гдето после 13 запросса(странное число не правда ли?) если не обновлять страничку то для отправки реквеста необходимо дважды обратиться к функции сенд с первого раза она непонимает ... при чём ждать можно сколь угодно долго.. всёравно с первого кликане срабатывает, но как только делаеш 2-й клик реквест отсылается, но респонс считывается не 1 раз а 2 .. собственно как и кликов... тоесть респонс возвращается 2 раза подрят... в чём бок?