我正在使用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不支持我需要发送的数据长度)。
这里是代码重要部分的片段。有人对此问题有任何见解吗?提前谢谢。
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);
}
}
答案 0 :(得分:1)
我认为你需要为每个请求创建一个全新的XMLHttpRequest对象。
答案 1 :(得分:0)
快速注意一下......你不想要更好的逻辑来支持ActiveX xmlHTTP吗?
e.g。这些版本怎么样(按优先级降序排列)?
Msxml2.XMLHTTP.6.0
Msxml2.XMLHTTP.3.0
Msxml2.XMLHTTP
Microsoft.XMLHTTP
更新: 另一个选项......我知道(至少在过去)某些浏览器在初始化readyState属性方面存在问题...它没有设定值。
更改此行有帮助吗?
//was
if (_xml.readyState == 4 || _xml.readyState == "0")
//try this
if (typeof(_xml.readyState) == 'undefined' ||
_xml.readyState == 4 || _xml.readyState == "0")
答案 2 :(得分:0)
我可以在短时间内跳过参数问题。我目前有3个表单参数要发送。我通过使用一个显示表单堆栈元素被击中的字符,一个显示该stac被击中的部分的数字以及另一个原因的布尔值来进行设置。