Я использую JavaScript для отправки обновлений textarea обратно на сервер в режиме реального времени. Моя HTML-страница использует один объект XMLHttpRequest для асинхронной отправки данных на сервер. Сообщения отправляются потенциально при каждом событии onKeyUp, но поскольку я использую только один объект XMLHttpRequest, я ограничиваю запросы только POSTing, когда readyState равен 0 (неинициализирован) или 4 (загружен).
Против IIS6 на Windows 2003 Server все работает нормально. В отличие от IIS7 в Windows 7 Professional, readyState моего объекта XMLHttpRequest застревает на 1 (инициализируется), если я быстро набираю несколько символов.
Количество символов, которые я могу получить, варьируется от 3 до 20 или около того. Если я перезагружу страницу, я могу ввести еще несколько символов, пока не застряну снова. Если я печатаю медленно, я могу ввести больше символов, прежде чем увижу проблему. [Может ли это иметь какое-либо отношение к ограничениям на IIS7?]
Кроме того, если я использую GET вместо POST, все работает нормально (за исключением того, что GET не поддерживает длину данных, которые мне нужно отправить).
Вот фрагмент важных битов кода здесь. У кого-нибудь есть понимание этой проблемы? Заранее спасибо.
var _xml = getXmlHttpRequest();
function getXmlHttpRequest()
{
if (window.XMLHttpRequest)
return new XMLHttpRequest();
else if (window.ActiveXObject)
return new ActiveXObject("Microsoft.XMLHTTP");
alert ("Upgrade your browser, Fool!");
return null;
}
function postValue(value)
{ // sends the answer to the server for saving
if (_xml.readyState == 4 || _xml.readyState == "0")
{
var params = "value=" + encodeURIComponent(value);
_xml.open("post", "save.py", true);
_xml.onreadystatechange = handlePostValue;
_xml.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
_xml.setRequestHeader("Content-Length", params.length);
_xml.setRequestHeader("Connection", "close");
_xml.send(params);
}
}