Каков самый легкий и самый безопасный способ получить объект XmlHttpRequest что работы через все браузеры? Без любых дополнительных библиотек. Существует ли фрагмент кода, который Вы часто используете?
P.S. Я знаю, что существуют тонны примеров в сети, но это - точно причина, которую я спрашиваю: существует слишком много различных примеров, и я просто хочу, чтобы что-то простое и доказанное работало.
jQuery и другие библиотеки НЕ являются опцией. Почему jQuery пропускает память так плохо?
Хотя я бы порекомендовал использовать полную библиотеку, чтобы упростить использование, создание запросов AJAX может быть довольно простым в современных браузерах:
var req = new XMLHttpRequest();
req.onreadystatechange = function(){
if(this.readyState == 4){
alert('Status code: ' + this.status);
// The response content is in this.responseText
}
}
req.open('GET', '/some-url', true);
req.send();
Следующий фрагмент представляет собой более сложный фрагмент, основанный на фрагменте из quirksmode.org и даже поддерживает очень старые браузеры (старше Internet Explorer 7):
function sendRequest(url,callback,postData) {
var req = createXMLHTTPObject();
if (!req) return;
var method = (postData) ? "POST" : "GET";
req.open(method,url,true);
// Setting the user agent is not allowed in most modern browsers It was
// a requirement for some Internet Explorer versions a long time ago.
// There is no need for this header if you use Internet Explorer 7 or
// above (or any other browser)
// req.setRequestHeader('User-Agent','XMLHTTP/1.0');
if (postData)
req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
req.onreadystatechange = function () {
if (req.readyState != 4) return;
if (req.status != 200 && req.status != 304) {
// alert('HTTP error ' + req.status);
return;
}
callback(req);
}
if (req.readyState == 4) return;
req.send(postData);
}
var XMLHttpFactories = [
function () {return new XMLHttpRequest()},
function () {return new ActiveXObject("Msxml3.XMLHTTP")},
function () {return new ActiveXObject("Msxml2.XMLHTTP.6.0")},
function () {return new ActiveXObject("Msxml2.XMLHTTP.3.0")},
function () {return new ActiveXObject("Msxml2.XMLHTTP")},
function () {return new ActiveXObject("Microsoft.XMLHTTP")}
];
function createXMLHTTPObject() {
var xmlhttp = false;
for (var i=0;i<XMLHttpFactories.length;i++) {
try {
xmlhttp = XMLHttpFactories[i]();
}
catch (e) {
continue;
}
break;
}
return xmlhttp;
}
не уверен на 100% в вашем вопросе - но если вы просите функцию для возврата кроссбраузерного экземпляра XMLHTTP - мы использовали это в нашей родной библиотеке ajax в течение многих лет - и никогда не было проблем в любом браузере
function getXMLHTTP() {
var alerted;
var xmlhttp;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
try {
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP")
} catch (e) {
try {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
} catch (E) {
alert("You must have Microsofts XML parsers available")
}
}
@else
alert("You must have JScript version 5 or above.")
xmlhttp=false
alerted=true
@end @*/
if (!xmlhttp && !alerted) {
// Non ECMAScript Ed. 3 will error here (IE<5 ok), nothing I can
// realistically do about it, blame the w3c or ECMA for not
// having a working versioning capability in <SCRIPT> or
// ECMAScript.
try {
xmlhttp = new XMLHttpRequest();
} catch (e) {
alert("You need a browser which supports an XMLHttpRequest Object")
}
}
return xmlhttp
}