2

ページの更新があるかどうかを確認するために AJAX 呼び出しを起動する間隔があります (これは、Facebook や StackExchange が新しい通知を確認するために使用するメカニズムに似ていると思います)。問題は、この呼び出しがカーソルを「進行中」または「ビジー」カーソルに変更し (視覚的な問題)、リンクをクリックするオプションを無効にすることです (機能上の問題)。

両方の問題が関連していると思います。どうすればこの影響を取り除くか、少なくとも結果を最小限に抑えることができますか?

いくつかのコード:

setInterval(function() {
    try {
        var mid = $($("ul#alert-messages li.regular")[0]).attr('ref');
        call_ajax('/load_alerts', {num:0, id:mid}, function (data) {
            if (data.ok) {
                for (var i=0; i<data.result.length; i++) {
                    // ....
                }
                // ...
            }
        }, function() {},          // Do not show any error for this!!
        false);                    // Do not change cursor!
    } catch (e) {}
}, 15000);

function call_ajax(url, data, fnSuccess, fnError) {
    $.ajax({
        'url': url,
        'type': 'POST',
        'data': data,
        'dataType': "json",
        'success' : function(data) {
            if (fnSuccess) {
                fnSuccess(data);
            } else {
                if (typeof data.msg != 'undefined') {
                    topBar(data.msg, typeof data.ok != 'undefined' && data.ok? 'message' : 'error');
                }
            }
        },
        error : function (jqXHR, textStatus, errorThrown) {
            console.log(errorThrown);
            if (fnError) {
                fnError(STR_ERROR_AJAX + textStatus);
            } else {
                topBar(STR_ERROR_AJAX + textStatus, 'error');
            }
        }
    });
}
4

1 に答える 1

2

オプションasync:trueを ajax 呼び出しに追加するとよいと思います。そうしないと、ブラウザは ajax が停止するまでフリーズし、それはあなたが望むものではありません

于 2012-06-04T16:04:45.603 に答える