Ajax не работает в IE - PullRequest
       7

Ajax не работает в IE

1 голос
/ 02 ноября 2010

У меня проблема с моим AJAX, где он не работает в IE, но работает в FF. Я получил большую часть следующего кода с сайта w3schools, так что я не понимаю, почему это будет неправильно. Может кто-нибудь мне помочь?

<script type="text/javascript">
    function checkRefresh(str)
    {
        if (str=="") {
            document.getElementById("lastCallID").innerHTML="";
            return;
        }

        if (window.XMLHttpRequest) {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
        } else {
            // code for IE6, IE5
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }

        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState==4 && xmlhttp.status==200) {
                if (document.getElementById("lastCallID").innerHTML < xmlhttp.responseText) {
                    GoPopUp();  
                } else {
                    setTimeout('checkRefresh()',15000)
                }
            }
        }
        xmlhttp.open("GET","getnewid.php",true);
        xmlhttp.send();
    }
</script>

СПАСИБО! * * 1004

РЕДАКТИРОВАТЬ: Насколько я могу судить, он не работает в IE6 -8. Основная идея заключается в том, что ajax вызывает скрипт, который запускает страницу php, которая получает самый последний идентификатор в базе данных. Затем он сравнивает идентификатор со страницы php с идентификатором на главной странице. Если идентификатор из запроса Ajax больше, чем на странице, он запускает функцию, которая запускает всплывающее окно jquery, чтобы предупредить пользователя о наличии новой записи в базе данных и дать ему возможность обновить. в IE 6,7,8 Это всплывающее окно никогда не запускается, поэтому я могу только представить, что ajax не работает правильно, чтобы получить новый идентификатор. Функция обновления работает, когда я ее вызываю, поэтому я думаю, что проблема в ajax. Но если вам интересно, вот функция GoPopUp

var GoPopUp = function(){
            $('#PopNewCall').fadeIn('slow');
            PageRefreshTimer();

        }

        //Function which refreshes page after a certain number of seconds with no user Inputs
        var PageRefreshTimer = function(){
            setTimeout("location.reload(true);",30000); //1,000 = 1 second
        }

        //Function which refreshes page after user has clicked refresh
        var RefreshNow = function(){
            setTimeout("location.reload(true);",0);
        }

Ответы [ 5 ]

1 голос
/ 02 ноября 2010

Вот функция, которую я хотел бы использовать для получения кросс-браузерного объекта XMLHttpRequest.

function getRequestObject() {
    var options = [
        function () { return new XMLHttpRequest() },
        function () { return new ActiveXObject("Microsoft.XMLHTTP") },
        function () { return new ActiveXObject("Msxml2.XMLHTTP.6.0") }
    ];

    for (var i = 0, il = options.length; i < il; i++) {
        try { return options[i]() } catch(e) {}
    }
}

var xhr = getRequestObject();
if (!xhr) { return; } // :(

// use xhr here
xhr.open("GET", "/foo/bar");
0 голосов
/ 02 ноября 2010

Для простого кросс-браузерного решения я бы предложил использовать jQuery.
API jQuery AJAX можно найти по адресу http://api.jquery.com/jQuery.ajax/

0 голосов
/ 02 ноября 2010

Редактировать: Извините, я бы опубликовал это как комментарий к ответу Кэти, но, как новый пользователь, у меня недостаточно баллов за репутацию. Несмотря на это, я уверен, что большинство согласится с обоснованностью моего комментария.


@ catie, Как разработчики, у всех нас есть проблемы с IE, но для учителя было бы странным указывать учащимся «не связываться с IE», так как это мало что подготовило бы вас к реальному миру.

Реальность такова, что IE не исчезнет в ближайшее время, и между версиями 6/7/8 они по-прежнему занимают более 50% рынка в мире. В качестве лучшей практики всегда лучше убедиться, что ваш сайт / код работает во всех браузерах, как и ожидалось, так же, как @august solution / Suggestion.

0 голосов
/ 02 ноября 2010

Я не вижу ошибки в вашем коде, но: есть ли причина не использовать одну из замечательных существующих сред, таких как twobirds , jquery , mootools или prototypejs для создания AJAX-вещей?если вы попытаетесь написать это самостоятельно, поддерживая все браузеры (или, по крайней мере, большие), вы попадете в ад и потратите много времени (времени, которое вы могли бы использовать для разработки или усовершенствования других вещей)

РЕДАКТИРОВАТЬ: в качестве ответа на ваш комментарий: я не знаю, что именно вы пытаетесь сделать, но похоже, что вы периодически повторяете «getnewid.php» в «lastCallID».это было бы так (не знаю, для чего предназначен GoPopUp (), просто вызывая его после каждого обновления в этом случае):

var refreshInterval = setInterval(function() {
     $('#lastCallID').load('getnewid.php', function(){ GoPopUp(); });
}, 15000);
0 голосов
/ 02 ноября 2010

Вы должны отправить свое задание в IE? Наш учитель (когда я проходил соответствующий аналогичный курс) попросил нас не беспокоиться о IE, так как многие вещи не работают над ним Попробуйте обновить браузер или еще что-нибудь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...