Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AJAX响应-XmlHttp.responseXML被切断 当一个Ajax请求返回的响应字符串在中间被截断时,我们遇到了一个奇怪的行为。我们正在检查readyState(对于4)和XmlHttp.status(对于200),然后才继续解析responseXML_Javascript_Ajax_Xmlhttprequest_Httpresponse - Fatal编程技术网

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" />