Ответ
metaluga 23.07.2011 09:51
Спасибо всем кто делится советами :) Как то давно уже пробовали запускать сайт на обновленном парсере и работать он увы не стал, так и оставили как есть.
У меня очень упрощенный вариант JSHttpRequest. Принцип такой в файле auto.p в корневой папке такой код:
<script language="JavaScript"
src=".../JSHttpRequest.js"></script>
<script language="javascript"><!--
function doLoad(which,rdt) {
document.getElementById(which).innerHTML;
var query = '' + rdt;
var req = new JSHttpRequest();
req.onreadystatechange = function() {
if (req.readyState == 4) {
document.getElementById(which).innerHTML =
req.responseText;
}
}
req.caching = true;
req.open('GET', 'load.html', true);
req.send({ q: query });
}
var timeout = null;
function doLoadUp(which,elm) {
var tt=null;
tt=which+'&first=' + document.getElementById(elm).value + '&second=' + elm;
if (timeout) clearTimeout(timeout);
timeout = setTimeout(doLoad(which,tt), 1000);
}
//--></script>
и еще есть файл в корневой папке JSHttpRequest.js с кодом:
function JSHttpRequest() {}
(function() {
var count = 0;
var pending = {};
var cache = {};
JSHttpRequest.dataReady = function(id, text, js) {
var th = pending[id];
if (th) {
if (th.caching) cache[th.hash] = [text, js];
th._dataReady(text, js);
} else {
alert("Ошибка: неизвестный id: "+id);
}
}
JSHttpRequest.prototype = {
// Standard properties.
onreadystatechange: null,
readyState: 0,
responseText: null,
responseXML: null,
status: 200,
statusText: "OK",
// Additional properties.
responseJS: null,
caching: false,
SID: null,
// Internals.
_span: null,
abort: function() {
this.readyState = 0;
var span = this._span;
if (span) {
this._span = null;
setTimeout(function() {
span.parentNode.removeChild(span);
}, 100);
}
return false;
},
open: function(method, url, asyncFlag, username, password) {
if ((""+method).toLowerCase() != 'get') {
alert('Only GET method is supported!');
return false;
}
this.url = url;
return true;
},
send: function(content) {
var id = count++;
var query = [];
if (content instanceof Object) {
for (var k in content) {
query[query.length] = escape(k) + "=" + content[k];
}
} else {
query = [content];
}
var qs = query.join('&');
query = 'id=' + id + '&sid=' + this.SID + '&' + qs;
var href = this.url + (this.url.indexOf('?')>=0? '&' : '?') + query;
var hash = this.url + '?' + qs;
this.hash = hash;
if (this.caching && cache[hash]) {
var c = cache[hash];
this._dataReady(c[0], c[1]);
return false;
}
with (document) {
var span = body.appendChild(createElement("SPAN"));
span.style.display = 'none';
span.innerHTML = 'Text for stupid IE.<script></' + 'script>';
this._span = span;
pending[id] = this;
setTimeout(function() {
var s = span.getElementsByTagName("script")[0];
s.language = "JavaScript";
s.src = href;
}, 10);
}
return true;
},
getAllResponseHeaders: function() {
return '';
},
getResponseHeader: function(label) {
return '';
},
setRequestHeader: function(label, value) {
},
_dataReady: function(text, js) { with (this) {
if (text !== null || js !== null) {
readyState = 4;
responseText = responseXML = text;
responseJS = js;
} else {
readyState = 0;
responseText = responseXML = responseJS = null;
}
onreadystatechange();
var span = this._span;
if (span) {
this._span = null;
setTimeout(function() {
// without setTimeout - chash in IE 5.0!
span.parentNode.removeChild(span);
}, 100);
}
}}
}
})();
и это все работает в IE5, а вот в Firefox`е не работает. Нужно может быть наверно установить последнюю версию кода JSHttpRequest но понятия не имею как это сделать или это ничего не изменит?