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が情報を保持しています。ログに書き込むと、途中で途切れる場合があります。この動作は、大量のデータでのみ発生しました。それについてのもう1つのことは、正確なXバイトの後ではなく、常に異なる部分で切断されることです。
ところで、これが起こる顧客はドイツ語のエンコーディングです。
ありがとう!
更新:私が言及するのを忘れたもう1つのことは、データを解析しようとすると(readyState==4およびXmlHttp.status=200の後)、次のエラーが発生することです。
エラー:メッセージ='この操作を完了するために必要なデータはまだ利用できません'