woodfairy
Новичок
AJAX: можно ли получить ответ без использования callback функции?
Есть такой классик.
можно ли как-то избежать вызова функции OnReadyState, чтобы данные от сервера возвращались в функцию, которая делает запрос к серверу?
т.е. чтобы в идеале вызов выглядел так:
а в результате в переменной xml содержался ответ сервера.
Есть такой классик.
PHP:
function NetLoader()
{
}
NetLoader.prototype = {
GetTransport: function()
{
var transport;
if(window.XMLHttpRequest)
{
transport = new XMLHttpRequest();
}
else
{
if(window.ActiveXObject)
{
try {
transport = new ActiveXObject("Msxml2.XMLHTTP");
} catch (err) {
transport = new ActiveXObject("Microsoft.XMLHTTP");
}
}
}
return transport;
},
LoadXMLDoc: function(Url,PostParams,OnLoad,OnError)
{
this.Url = Url;
this.Req = null;
this.OnLoad = OnLoad;
this.OnError = (OnError) ? OnError : this.DefaultError;
this.Req = this.GetTransport();
if(this.Req)
{
try
{
var Loader = this;
this.Req.onreadystatechange = function(){
Loader.OnReadyState.call(Loader);
}
this.Req.open('POST',Url,true);
this.Req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
var x = this.Req.send(PostParams);
}
catch (err)
{
this.OnError.call(this);
}
}
},
OnReadyState: function(){
var Req = this.Req;
var Ready = Req.readyState;
if(Ready == READY_STATE_COMPLETE)
{
var HttpStatus = Req.status;
if(HttpStatus == 200 || HttpStatus == 0)
{
this.OnLoad(Req.responseXML);
}
else
{
this.OnError.call(this);
}
}
},
DefaultError: function(){
alert("error fetching data!\n\nreadyState:" + this.Req.readyState + "\nStatus:" + this.Req.Status + "\nheaders:" + this.Req.getAllResponseHeaders());
}
}
т.е. чтобы в идеале вызов выглядел так:
PHP:
var xml = LoadXMLDoc(параметры);