これは奇妙なタイトルですが、何が起こっているのかを説明する方法がわかりません。
基本的に、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;
}