Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数语句在AJAX请求后被调用1次以上?_Javascript_Jquery - Fatal编程技术网

Javascript 函数语句在AJAX请求后被调用1次以上?

Javascript 函数语句在AJAX请求后被调用1次以上?,javascript,jquery,Javascript,Jquery,这是一个奇怪的标题,但我不知道如何描述正在发生的事情 基本上,我有以下代码在发出AJAX请求后运行: if (doAjax) { $("#loading").removeClass("visible"); $("#loading").addClass("hidden"); setTimeout(function () { $("#loading").css({ "display": "none", "opac

这是一个奇怪的标题,但我不知道如何描述正在发生的事情

基本上,我有以下代码在发出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请求返回结果,那么它将运行setFavorite;和最爱;功能一旦完成。我还能够在单击按钮时重新加载AJAX请求,然后在请求结束时运行这些函数

问题是,如果用户加载页面,它将运行AJAX,一切正常。但是,如果用户再次调用AJAX请求,该函数将运行两次。如果再次调用它,它将运行三次

因此,每次发出AJAX请求时,setFavorite的次数;和最爱;我们称之为增加1

我通过在setFavorite中放置一个警报来确认这一点,看看它为什么会随机调用,并且它总是被调用x次,其中x是用户重新加载AJAX请求的次数

如果需要,我会发布setFavorite;和最爱;函数,但我觉得错误在doAjax函数中

编辑1

重新加载功能:

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

$("#reload").click(reload);
编辑二人组

多贾克斯


这听起来像是每次运行函数时都要绑定“重新加载”按钮。它将多次运行该函数

您是否能够显示最喜爱的设置;和最爱;功能


如果每次重新加载都必须重新绑定按钮,则可以在重新绑定之前解除绑定按钮。

AJAX调用在哪里?如果不知道这是如何与AJAX交互的,我很难想象会发生什么。但是@Dcullen似乎很有钱,AJAX调用在documentready中,看起来是这样的:doAjaxurl;我用重新加载功能编辑了我的问题。如果你还想看最喜欢的电影,请告诉我;和最爱;函数。您是否可以尝试在重载函数中添加一个警报,以查看它是否存在相同的增量问题。这应该证明或取消证明绑定理论。在重新加载函数中添加警报后,它只显示一次警报。酷,证明错误。如果可能的话,下一步就是查看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;
}