2

asp.net ページからリクエストを送信し、SetInterval メソッドを介して GetCommand を呼び出して応答を待ちます。

    function GetCommand(id, sid) {
    getCommandResponse = $.ajax({
        type: "POST",
        async: true,
        url: "../WebServices/TSMConsole.asmx/GetCommand",
        data: "{'param' : '" + id + "', 'sid' : '" + sid + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(result, status) {
            AjaxFinishedGet(result, status);
            getCommandResponse = null;
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            AjaxFailedGet(XMLHttpRequest, textStatus, errorThrown);
            getCommandResponse = null;
        }
    });
}

AjaxFinishedGet(result, status) で、データを抽出しようとします。

    function AjaxFinishedGet(xml, status) {
    endDate = new Date();
    if (xml.d.IsPending == 'false' || endDate - startDate > timeoutMSec) {
        if (getCommand != null) {
            window.clearInterval(getCommand);
            getCommand = null;
            WriteGetCommand(xml.d.Text);
            $("#showajax").fadeOut("fast");
        }
    }
}

ただし、テキスト サイズが 102330 バイトを超える場合 - AjaxFinishedGet の代わりに、AjaxFailedGet が呼び出されます :(

ajax応答データサイズの制限やjavascript変数のサイズに関する情報は見つかりませんでした.少なくともそのような変数は問題なく1MBを保持できます. 実際、テキストには 1MB のデータが含まれる場合があります...

問題はどこだ?

4

4 に答える 4

1

ジェームズブラック、私はエラーについての情報を持っていません:

function AjaxFailedGet(XMLHttpRequest, textStatus, errorThrown) {
    $("#<%= tbResponse.ClientID %>").text(errorThrown);
    if (getCommand != null) {
        window.clearInterval(getCommand);
        $("#showajax").fadeOut("fast");
    }
}
  • errorThrownは空です。

WebサーバーはVistax32上のIIS7です

zazk、ありがとう、そのようなチェックを入れることは良い点であり、私は信頼性のためにこのフラグを使用します。ただし、特定のケースでは、問題の原因ではないと思います。データサイズが102330で、102331以降が機能しない場合、応答出力は常に機能します(new String('x'を使用しています) 、102330)、したがって、特殊文字の問題などではありません)。

于 2009-11-11T00:05:55.903 に答える
1

複数のリクエストでエラーが発生する可能性があります。おそらく、有効な現在のリクエストがないことを確認することをお勧めします。

var loading = false;
function GetCommand(id, sid) {
    if (loading) {return false;}
    loading =  true;
        getCommandResponse = $.ajax({
         ....
         ....
        });

}

function AjaxFinishedGet(xml, status) {
    loading = false;
    ...
    ...
}
于 2009-11-10T19:23:59.547 に答える
0

.NET の web.config ファイルのデフォルト設定は 4mb です。

<system.web>
<httpRuntime maxRequestLength="4096" />
</system.web>

は INT であるためmaxRequestLength、理論上の最大値は INT の最大値である 2,147,483,647 です。

于 2012-11-08T00:28:38.483 に答える
0

AJAX呼び出しから返される文字列の長さまで追跡した厄介なエラーが発生しました。それは約 63639 (iirc) で、これは ushort の限界に近づいています (これもまた iirc です!) (残りの文字数制限を補うために、iis は独自のものを追加していると思います)。

文字列内の html からすべてのスタイリングを削除し、クライアントが受信したときに JQuery を介して追加することができました。:)

于 2013-06-18T14:35:59.723 に答える