【发布时间】:2010-02-04 20:08:29
【问题描述】:
我正在使用 JavaScript 将 textarea 更新实时发送回服务器。我的 HTML 页面使用单个 XMLHttpRequest 对象将数据异步 POST 到服务器。消息可能在每个 onKeyUp 事件中发送,但由于我只使用单个 XMLHttpRequest 对象,因此我仅在 readyState 为 0(未初始化)或 4(已加载)时通过 POST 来限制请求。
针对 Windows 2003 Server 上的 IIS6,一切正常。针对 Windows 7 Professional 上的 IIS7,如果我快速输入多个字符,我的 XMLHttpRequest 对象的 readyState 会卡在 1(已初始化)。
我可以输入的字符数从 3 到 20 左右不等。如果我重新加载页面,我可以再输入几个字符,直到我再次卡住。如果我打字慢,那么我可以在看到问题之前输入更多字符。 [这可能与 IIS7 的连接限制有关吗?]
另外,如果我使用 GET 而不是 POST,一切正常(除了 GET 不支持我需要发送的数据长度)。
这里是重要代码位的 sn-p。有人对这个问题有任何见解吗?提前致谢。
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);
}
}
【问题讨论】:
-
@Mike - 哪些浏览器会发生这种情况?
-
很好的问题,凯夫。我认为这是独立于浏览器的,但事实并非如此。问题出现在: - Windows XP 上的 IE6 - Windows 7 上的 IE8 - Windows XP 上的 Google Chrome 1.0 - Windows 7 上的 Google Chrome 1.0 问题不会出现在: - Ubuntu 9.10 上的 Firefox 3.5.7(适用于 Ubuntu Canonical 1.0)这些结果让我非常惊讶。所以看起来只有某些浏览器到 Web 服务器的组合是有问题的。听起来我们到目前为止有很多线索,但我还没有解决方案:(
-
我注意到在我的 Windows 7 机器上使用 Google App Engine 网络服务器发生了同样的问题,即使在我的 Windows XP 机器上运行相同的客户端和服务器代码工作正常。这让我觉得这与网络服务器无关。很可能是操作系统或计算机本身。
标签: javascript ajax iis-7 post xmlhttprequest