2

当为 AJAX 请求返回的 responseXML 在中间被切断时,我们遇到了一个奇怪的行为。我们正在检查 readyState(对于 4)和 XmlHttp.status(对于 200),然后才继续解析 responseXML。

以下是相关代码:

. 
. 
. 
if ((myCommunicator != null) && (myCommunicator.XmlHttp.readyState == 4)) 
{ 
    myCommunicator.OnDataAvailable(); 
}

OnDataAvailable 函数:

SoapCommunicator.OnDataAvailable = function () {   
DebugWrite("OnDataAvailable");   
XMLResponse = this.XmlHttp.responseXML;

if (this.XmlHttp.status != 200)
{
    DebugWrite("XmlHttp.status " + this.XmlHttp.status);
    DebugWrite("XmlHttp.statusText " + this.XmlHttp.statusText);
    DebugWrite("XmlHttp.readyState " + this.XmlHttp.readyState);
}
//  DebugWrite("xml=" + XMLResponse.xml.replace(/\r\n/g, ""));
if (XMLResponse.xml.length > 0)
{
    if (0 == XMLResponse.parseError.errorCode)
    {
        var dataNode = XMLResponse.lastChild.firstChild.firstChild.firstChild;
    }
    else
    {
        throw "Failed to parse SOAP response";
    }
}
else
{
    var result = new Object();
    result.IsSuccessful = false;
    result.ErrorDescription = "Failed to connect to server.";
    result.ErrorCode = failedToConnectToServer;
    eval(this.ResultCallBack + "(result)");
} }

在这个例子中,dataNode 保存了信息。将其写入日志时,我们看到有时它会在中间被切断。仅在大量数据时才注意到此行为。关于它的另一件事是它总是在不同的部分被切断,而不是在精确的 X 字节之后。

顺便说一句,发生这种情况的客户使用的是德语编码。

谢谢!

更新:我忘记提及的另一件事是,一旦我们尝试解析数据(在 readyState == 4 和 XmlHttp.status = 200 之后),我们就会收到此错误:

错误:消息='完成此操作所需的数据尚不可用'

4

2 回答 2

0

假设您在后端(ASMX)上使用 ASP.NET Web 服务 - 尝试将此行添加到 web.config 文件(到该部分):

<httpRuntime maxRequestLength="2147483647" />
于 2013-03-02T19:18:56.390 回答
0

我有一个类似的问题,有时 XmlHttpRequest 响应被切断。

我不知道这是否是您的问题的原因,但这可以帮助解决此类问题的人。我的问题显然是由于响应中有一些 Unicode 字符引起的。

似乎由于 Unicode 字符,当我在服务器上设置内容长度标头字段时,我实际上将它设置得太低。当浏览器收到响应时,它只读取 content-length 标头指定的字节数,由于我的错误,它在响应中指示字符数,而不是字节数。

我在 Node.js 上使用 String:length 来计算内容长度的值。显然,它返回字符数,而不是字节数。

通过注释掉在服务器上设置内容长度标头的代码部分,我解决了这个问题。现在它工作正常。

于 2020-06-05T19:51:33.723 回答