Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Не работает XMLHttpRequest (status) в Explorer и Opera (https://javascript.ru/forum/css-html/27814-ne-rabotaet-xmlhttprequest-status-v-explorer-i-opera.html)

Alepri 25.04.2012 19:02

Не работает XMLHttpRequest (status) в Explorer и Opera
 
Привет всем.
У меня возникла проблема c таким скриптом:

function getXmlHttp(){
  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;
}

function getMsg() {
    var req = getXmlHttp()
    req.open('GET', 'http://example.com', true)
    req.onreadystatechange = function() {
    if (req.readyState == 4) {
    if (req.status == 204) {
    document.getElementById('mydiv').appendChild(document.createTextNode("my-message_1"));
   }
    if (req.status == 200) {
    document.getElementById('mydiv').appendChild(document.createTextNode("my-message_2"));
   }
  }
}
req.send(null)
}


Во всех браузерах работает отлично а вот в Explorer и Opera не хочет работать и всё.
Я так понимаю, в этих браузерах не читается if (req.status == ???)

Помогите, если кто знает решение такой проблемы. :help:

devote 25.04.2012 23:34

У меня все работает:
<div id="mydiv"></div>
<script type="text/javascript">
function getMsg() {

    var req = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");

    req.open( 'GET', 'http://lookatcode.com/showjs', true );

    req.onreadystatechange = function() {
        if (req.readyState == 4) {
            if (req.status == 204) {
                document.getElementById('mydiv').appendChild(document.createTextNode("my-message_1"));
            }
            if (req.status == 200) {
                document.getElementById('mydiv').appendChild(document.createTextNode("my-message_2"));
            }
        }
    }

    req.send(null)
}

getMsg();
</script>

Alepri 26.04.2012 17:08

Спасибо.
Этот скрипт работает лучше :)
При запросе на сторонний домен Explorer выдаёт ошибку отказа в доступе а Opera вообще ничего не показывает.
Тут по видимости как-то запрос Аяксом с сервера делается а как такую фитчу прикрутить к PHP не знаю.

Адрес URL пользователем вводится через форму, в случае существования картинки (200) -
oтображает картинку, в другом случае (204) - моё сообщение.

Может есть и проще варианты чем XMLHttpRequest… Если кто встречался с подобным или знает похожий код подскажите пожалуйста

Alepri 26.04.2012 19:28

Вобщем у меня лучше получилось без XMLHttpRequest
Вот код нашёл, который выдаёт ошибку, в случае если нет параметров картинки (может кому понадобится)… ;)

function loadImage(src) {
    var image = new Image;
    image.onload = function() {
        if ('naturalHeight' in this) {
            if (this.naturalHeight + this.naturalWidth === 0) {
                this.onerror();
                return;
            }
        } else if (this.width + this.height == 0) {
            this.onerror();
            return;
        }
        // At this point, there's no error.
        document.body.appendChild(image);
    };
    image.onerror = function() {
        //display error
        document.body.appendChild(
            document.createTextNode('\nError loading as image: ' + this.src)
        );
    };
    image.src = src;
}

:victory:


Часовой пояс GMT +3, время: 14:12.