Сообщение об ошибке Internet Explorer «Время операции истекло» - PullRequest
2 голосов
/ 12 декабря 2011

У меня есть кусок кода, который работает в Chrome и Firefox, но не в Internet Explorer.Я не могу понять, что это за настоящая причина.Я получаю сообщение о тайм-ауте операции от Internet Explorer "Message: The operation was timed out."

Это функция ajax, которую я использую, от w3schools, поэтому я знаю, что это правильно.

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

    alert(xmlhttp);
    return xmlhttp;
}

Это кодэто застревает.Сообщение об ошибке находится в "ajaxRequest.send(postdata);".

function edit(){
    var ajaxRequest = ajax();   
    var postdata = "data=" + document.getElementById("id1").value + "<|>" + document.getElementById("id2").value + "<|>" +  document.getElementById("id3").value;


    ajaxRequest.onreadystatechange = function(){
            var ajaxDisplay = document.getElementById('ajaxDiv');
        if(ajaxRequest.readyState == 4 && ajaxRequest.status==200){
            ajaxDisplay.innerHTML = ajaxRequest.responseText;
        }
    }   
    alert(postdata);
    ajaxRequest.open("POST","confirmPage.php",false);
    ajaxRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    ajaxRequest.send(postdata);
    alert("Finished");
}

Все остальные страницы работают с тем же кодом в Internet Explorer, но не с этой конкретной страницей.Я не могу понять, почему.Эта страница работает в Chrome и Firefox, но не в Internet Explorer.Это никогда не идет в «Готово».Я использую IE 8.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2011

Частичный ответ:

Я понял проблему. Это не javascript и / или ajax. IE не может обработать большое количество результатов в запросах, поэтому время ожидания истекло. Это очень неясная ошибка, так как я думал, что это связано с функциями ajax, а не с файлом php.

Результирующий набор невелик. Есть 5 разных запросов. Каждая с 5-50 тысячами записей (я не печатаю их все, просто запрашиваю). Это истекло после большого набора результатов.

Для тестирования я создал тестовую страницу с простыми SELECT * запросами, и она может обрабатывать только 2-3 запроса. Если это больше, чем это время ожидания.

0 голосов
/ 12 декабря 2011

Поскольку вам требуется синхронное поведение, попробуйте следующее:

ajaxRequest.open("POST", "confirmPage.php", false);
ajaxRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
ajaxRequest.send(postdata);

if (ajaxRequest.status === 200) {
    document.getElementById('ajaxDiv').innerHTML = ajaxRequest.responseText;
}

alert("Finished");

Вам не нужно onreadystatechange, поскольку запрос является синхронным.

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