Срещаме странно поведение, когато responseXML, който се връща за AJAX заявка, е отрязан по средата. Проверяваме както 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), получаваме тази грешка:
ГРЕШКА: Съобщение = 'Данните, необходими за завършване на тази операция, все още не са налични'
Content-Length
заглавка беше изчислена на брой знаци вместо брой байтове (и някои знаци заемат няколко байта). - person Quentin   schedule 28.02.2013