Javascript AJAX响应-XmlHttp.responseXML被切断 当一个Ajax请求返回的响应字符串在中间被截断时,我们遇到了一个奇怪的行为。我们正在检查readyState(对于4)和XmlHttp.status(对于200),然后才继续解析responseXML
以下是相关代码:Javascript AJAX响应-XmlHttp.responseXML被切断 当一个Ajax请求返回的响应字符串在中间被截断时,我们遇到了一个奇怪的行为。我们正在检查readyState(对于4)和XmlHttp.status(对于200),然后才继续解析responseXML,javascript,ajax,xmlhttprequest,httpresponse,Javascript,Ajax,Xmlhttprequest,Httpresponse,以下是相关代码: . . . if ((myCommunicator != null) && (myCommunicator.XmlHttp.readyState == 4)) { myCommunicator.OnDataAvailable(); } ONDATA可用功能: SoapCommunicator.OnDataAvailable = function () { DebugWrite("OnDataAvailable"); XMLRes
.
.
.
if ((myCommunicator != null) && (myCommunicator.XmlHttp.readyState == 4))
{
myCommunicator.OnDataAvailable();
}
ONDATA可用功能:
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之后),我们就会得到以下错误:
错误:消息=“完成此操作所需的数据不正确。”
尚未提供'
假设您在后端(ASMX)上使用ASP.NET Web服务,请尝试将此行添加到Web.config文件(到节):
我遇到了类似的问题,XmlHttpRequest响应有时会被切断 我不知道这是否是你的问题的原因,但这可能有助于解决此类问题。我的问题显然是由于响应中有一些Unicode字符引起的 似乎由于Unicode字符的缘故,当我在服务器上设置content length头字段时,实际上设置得太低了。当浏览器收到响应时,它只读取内容长度标题指定的字节数,由于我的错误,该标题指示响应中的字符数,而不是字节数 我在Node.js上使用String:length来计算内容长度的值。显然,它返回的是字符数,而不是字节数
我通过注释掉在服务器上设置内容长度头的代码部分,解决了这个问题。现在它工作正常。真的是“中间”还是“接近尾声”?数据中是否有任何非ASCII字符?我看到HTTP响应被切断,因为它们的
内容长度
头是根据字符数而不是字节数计算的(有些字符占用多个字节)。@Quentin感谢您的帮助。我将请求发送到C#web服务,您指的是请求内容长度还是响应内容长度?目前我根本没有在请求中设置内容长度。我如何设置响应的内容长度?响应内容长度(正是被切断的响应)。“我不知道你是怎么设置的,我不做C#,我也不知道你的系统是怎么设置的。@昆汀,但问题是每次在不同的地方切割时,我都会得到相同的响应。”。也许不是每次,但有时。
<httpRuntime maxRequestLength="2147483647" />