Вход

Просмотр полной версии : Проблема с AJAX


Dim@
15.09.2012, 23:57
Перечитал очень много литературы по AJAX и не могу его понять - не срабатывают примеры, поэтому недоходит до меня, вот сам HTML:
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script>
function Ajax () {
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
var ajax = Ajax();
ajax.open("GET", "test.xml", true);
ajax.onreadystatechange = function() {
if (ajax.readyState == 4) {
alert("");//срабатывает
alert(ajax.status);//всегда 0
if(ajax.status == 200) {
alert("");//не срабатывает
}
}
};
ajax.send(null);
</script>
</body>
</html>

В чем ошибка в коде (консолька у меня молчит) или это особенности работы AJAX с локалкой :( ?

devote
16.09.2012, 01:15
function Ajax () {
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}

Давно пора забыть уже про этот способ.

Достаточно делать так:
var ajax = window.XMLHttpRequest ? new XMLHttpRequest : new ActiveXObject("Microsoft.XMLHTTP");
ajax.open("GET", "test.xml", true);
ajax.onreadystatechange = function() {
if ( ajax.readyState == 4 ) {
var status = ( ajax.status === 1223 ) ? 204 :
( ajax.status === 0 && ( self.location || {} ).protocol == 'file:' ) ? 200 : ajax.status;

if ( status >= 200 && status < 300 || status === 304 ) {
alert( ajax.responseText ); // срабатывает
}
}
};
ajax.send( null );

Dim@
16.09.2012, 10:05
devote,
хм, спасибо, правда не понимаю этогоajax.onreadystatechange = function() {
if ( ajax.readyState == 4 ) {
var status = ( ajax.status === 1223 ) ? 204 :
( ajax.status === 0 && ( self.location || {} ).protocol == 'file:' ) ? 200 : ajax.status;

if ( status >= 200 && status < 300 || status === 304 ) {

devote
16.09.2012, 20:19
правда не понимаю этого
а что там не понятного? Я не помню какой браузер, но какой то из них выдает статус 0 если скрипт запускать по протоколу file

Dim@
16.09.2012, 22:52
devote,
видно FF