两个不同的ajax调用被链接在一起

时间:2014-09-17 15:35:51

标签: jquery ajax history.js

我在一个页面上有两个ajax调用,但由于某种原因,它们被链接在一起(在第一次调用之后)。我已经为每个ajax调用指定了不同的类来运行,但仍然无法正常工作。我也使用了History.js插件。我认为这可能与它有关。

我尝试过使用不同的变量但没有骰子。我对ajax很新,任何帮助都会非常感激!请参阅下面的代码,我已尝试对其进行简化,但最终结果将是每个部分的两个不同的转换。

编辑:制作了一个jsfiddle here

首次点击后会出现问题。

$(document).ready(function() {
function isCanvasSupported(){
var elem = document.createElement('canvas');
return !!(elem.getContext && elem.getContext('2d'));
}

// The action for the rusty rusty browsers  
if (!isCanvasSupported()) {}

var pushstate = 'push';

    if (!isCanvasSupported()) {
        pushstate = 'no';
    }

var projectClick = function(url) {

    if (typeof(window.history.pushState) == 'function' && pushstate == 'push') {    

        $.ajax({
            url: url,
            type: "get",
            dataType: "html",

            success : function(datam) {

                alert('project clicked')
            }
        });
    } 

    else {
        window.location.href = url;
    }

}

var mainNavClick = function(url) {

    if (typeof(window.history.pushState) == 'function' && pushstate == 'push') {    

        $.ajax({
            url: url,
            type: "get",
            dataType: "html",

            success : function(data) {

                alert('main nav clicked');
                console.log('clickd')

            }
        });
    } 

    else {
        window.location.href = url;
    }

}

    if (pushstate == 'push') {
    $('body').on('click', "#page-menu", function(e){    

        History.Adapter.bind(window,'statechange',function(){
            var State = History.getState();
            mainNavClick(State.url);
        });

        e.preventDefault();

        History.pushState({state:1,rand:Math.random()}, document.title, this.href);

    });



    $('body').on('click', ".to-project", function(e){   

        History.Adapter.bind(window,'statechange',function(){
            var State = History.getState();
            projectClick(State.url);
        });

        e.preventDefault();

        History.pushState({state:1,rand:Math.random()}, document.title, this.href);

    });

}

});

1 个答案:

答案 0 :(得分:0)

每次用户点击" .to-project"您将事件绑定到历史记录适配器。绑定事件保持不变直到被特别删除,并在触发时触发。因此,如果用户单击三次,则表示事件被绑定三次并且每次触发一次。不要在点击时绑定事件;而是在页面加载时绑定事件。