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が情報を保持しています。ログに書き込むと、途中で途切れる場合があります。この動作は、大量のデータでのみ発生しました。それについてのもう1つのことは、正確なXバイトの後ではなく、常に異なる部分で切断されることです。

ところで、これが起こる顧客はドイツ語のエンコーディングです。

ありがとう!

更新:私が言及するのを忘れたもう1つのことは、データを解析しようとすると(readyState==4およびXmlHttp.status=200の後)、次のエラーが発生することです。

エラー:メッセージ='この操作を完了するために必要なデータはまだ利用できません'

4

2 に答える 2

0

バックエンド (ASMX) で ASP.NET Web サービスを使用していると仮定すると、次の行を web.config ファイル (セクション) に追加してみてください。

<httpRuntime maxRequestLength="2147483647" />
于 2013-03-02T19:18:56.390 に答える