0

btnExportという入力ボタンがクリックされるたびに、Webページで10秒ごとに発生するタイマー間隔を登録する次のjqueryがあります。

if ($) {
    $(document).ready(function () {
        $("input[id$='btnExport']").click(function ($e) {
            // javascript timer function
            window.setInterval(ExportProgressCheck, 10000);
        });

        function ExportProgressCheck() {
            $.ajax({
                type: "POST",
                url: "DMZ_Export.aspx/GetExportProgress",
                contentType: "application/json; charset=utf-8",
                data: "",
                dataType: "json",
                success: AjaxSuccess,
                error: AjaxFailed
            });
        }
    });
}

ただし、特定のシナリオでは、ページの読み込み自体が読み込まれるとすぐにタイマー間隔が刻々と過ぎ始める必要があります。私の問題は、コードビハインドのページ読み込みイベント内からこれを行う方法がわからないことです。理論的には次のようになります...

protected void Page_Load(object sender, EventArgs e) {
    if (!Page.IsPostBack) {
        if (IsExportInProgress()) {
            // Register the timer interval now!! How do I do this??
            // window.setInterval(ExportProgressCheck, 10000);
            }
        }
    }
}

スタートアップスクリプトを登録してこれを達成しようとしましたが、ExportProgressCheckが何であるかがわからないため、スクリプトが気に入らない...

ClientScriptManager cs = Page.ClientScript;
cs.RegisterStartupScript(cstype, csname1,
    "<script type=\"text/javascript\">window.setInterval(ExportProgressCheck, 10000);</script>",
    false);

これに関する助けをいただければ幸いです。ありがとう!

4

3 に答える 3

1

$(document).ready()つまり、DOM がロードされる (ページがロードされる) とすぐにコードが実行されます。

特定の条件下setInterval()で関数の外で呼び出すだけで済みます。click

if ($) {
    $(document).ready(function () {

        if(condition)
            window.setInterval(ExportProgressCheck, 10000);

        $("input[id$='btnExport']").click(function ($e) {
            // javascript timer function
            window.setInterval(ExportProgressCheck, 10000);
        });

        function ExportProgressCheck() {
            $.ajax({
                type: "POST",
                ...
于 2011-04-20T22:10:19.970 に答える
0

あなたは正しい軌道に乗っています。

いくつかの点

  1. RegisterStartupScript を呼び出すときに <script..> タグを追加する必要はありません。最後のパラメーターとして true を指定するだけです。

  2. window.setInterval 行がヒットしたとき、ExportProgressCheck はまだ定義されていないようです。ソースを見て、関数が定義されている場所と、割り当て呼び出しによって参照されている場所を確認するだけで、これを確認できます。考えられる原因: 不適切な形式の js が破損している可能性があります。ページがロードされた後、その機能は利用できますか? JavaScriptウィンドウを開いて呼び出すことができますか?

  3. $(document).ready 行...はい。BODY 要素全体が解析された後に実行されます。その ready 節から ExportProgressCheck 関数定義を取り出す必要があります。そうすれば、起動スクリプトで利用できます

起動スクリプトを登録すると、呼び出しがセグメントの一番下に配置されます。すべてのスクリプトはそれよりもロードする必要があります。ソースを調べて、何がおかしいのかを判断する

于 2011-04-20T21:56:57.880 に答える
0

別のルートに行くことでこれをやってのけました。jQuery の $get 関数を使用して別の aspx ページにアクセスし、条件値を取得します。

if ($) {
    $(document).ready(function () {

        $.get("ExportInProgCheck.aspx", function (response) {
            if (response != '')
                window.setInterval(ExportProgressCheck, 10000);
        });
    });
}

ExportInProgCheck.aspx は、条件が満たされた場合に単に「true」を返し、その時点で window.setInterval が設定されます。

于 2011-04-21T15:27:33.443 に答える