在针对IIS7 + Windows 7 Pro的几个连续请求之后,XMLHttpRequest POST停留在readyState 1

时间:2010-02-04 20:08:30

标签: javascript ajax iis-7 post xmlhttprequest

我正在使用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);
    }
}

3 个答案:

答案 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被击中的部分的数字以及另一个原因的布尔值来进行设置。