1

これは奇妙なタイトルですが、何が起こっているのかを説明する方法がわかりません。

基本的に、AJAXリクエストが行われた後に実行される次のコードがあります。

if (doAjax) {
    $("#loading").removeClass("visible");
    $("#loading").addClass("hidden");
    setTimeout(function () {
        $("#loading").css({
            "display": "none",
            "opacity": "0",
        });
    }, 300);
    if (number.length === 0) {
        $("#nothing").css("display", "inline-table");
        setTimeout(function () {
            $("#nothing").addClass("visible");
        }, 1);
    } else {
        setFavorite();
        checkFavorite();
    }
}

AJAXリクエストが結果を返す場合、AJAXリクエストは完了するsetFavorite();とand関数を実行します。checkFavorite();また、ボタンをクリックしたときにAJAXリクエストをリロードする機能もあります。これにより、リクエストの最後にこれらの関数も実行されます。

問題は、ユーザーがページをロードすると、AJAXが実行され、問題がないことです。ただし、ユーザーがAJAXリクエストを再度呼び出すと、関数は2回実行されます。もう一度呼び出されると、3回実行されます。

そのsetFavorite();ため、AJAXリクエストが行われるたびに、呼び出される回数checkFavorite();が1つ増えます。

alert内に配置して、setFavorite()なぜこれほどランダムに呼び出されているのかを確認しました。これは常にx回呼び出されます。ここで、xはユーザーがAJAXリクエストをリロードした回数です。

setFavorite();必要に応じてと関数を投稿しcheckFavorite();ますが、エラーは関数内にあるように感じdoAjaxます。

編集1

リロード機能:

function reload(){
    doAjax("http://www.codekraken.com/testing/snowday/wgrz.html");
};

$("#reload").click(reload);

デュオを編集

doAjax();

function doAjax(url) {
    $.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22" + encodeURIComponent(url) + "%22&format=xml'&callback=?",
    function (data) {
        if (data.results[0]) {
            $("#content").html("");
            var number = $(filterData(data.results[0])).find("#gtv_leftcolumn table:gt(1)");
            for (var i = 0; i < number.length; i++) {
                var school = $(filterData(data.results[0])).find("#gtv_leftcolumn table:gt(1) .maintext p:eq(" + i + ")").text();
                var type = $(filterData(data.results[0])).find("#gtv_leftcolumn table:gt(1) .trafficbriefs:nth-child(even) p:eq(" + i + ")").text();
                $("#content").append("<div class='row'><div class='row-inside'><div class='row-l'>" + school + "</div><div class='row-r'>" + type + "</div></div><div class='star'><div class='star-inside'></div></div></div>");
            };
            if (doAjax) {
                $("#loading").removeClass("visible");
                $("#loading").addClass("hidden");
                setTimeout(function () {
                    $("#loading").css({
                        "display": "none",
                        "opacity": "0",
                    });
                }, 300);
                if (number.length === 0) {
                    $("#nothing").css("display", "inline-table");
                    setTimeout(function () {
                        $("#nothing").addClass("visible");
                    }, 1);
                } else {
                    setFavorite();
                    checkFavorite();
                }
            }
        } else {
            console.log("error");
        }
    })
}

function filterData(data) {
    data = data.replace(/<?\/body[^>]*>/g, '');
    data = data.replace(/[\r|\n]+/g, '');
    data = data.replace(/<--[\S\s]*?-->/g, '');
    data = data.replace(/<noscript[^>]*>[\S\s]*?<\/noscript>/g, '');
    data = data.replace(/<script[^>]*>[\S\s]*?<\/script>/g, '');
    data = data.replace(/<script.*\/>/, '');
    data = data.replace(/<img[^>]*>/g, '');
    return data;
}
4

1 に答える 1

2

これは、関数が実行されるたびにリロードボタンをバインドしているように聞こえます。これは関数を複数回実行します。

setFavorite();を表示できますか?およびcheckFavorite(); 関数?

リロードするたびにボタンを再バインドする必要がある場合は、再バインドする前にボタンのバインドを解除できます。

于 2012-10-18T20:08:29.283 に答える