如何使用javascript + ajax的popstate函数,而不是jQuery?

时间:2015-02-09 13:27:37

标签: javascript ajax html5 pushstate popstate

对不起这里的新手问题,我遗漏了一些东西,可能很简单,但我认为javascript至关重要..

我有一个ajax网站,有四个html页面,index.php,food_and_health.php,enlightenment.php和about_us.php。 我在三个中有ajax函数,而不是索引。

而且我确实理解我需要添加popstate函数,使用后退和前进,此时我正在查看教程,正如您所见,我只有控制台日志。

我收到控制台消息,&foo未定义',我尝试将其设为全局变量,没有运气,因为我不太清楚这是否也是问题。

我没有锚点,或者我的html中的任何内容,其ID为' foo',但我尝试从foo更改为' text'和' ; cssmenu',在我的js.file中,并尝试添加id =' foo'我的一个锚标签,在我的HTML中,但仍然是相同的消息。

所以我猜,它是一个局部变量,在我的ajax函数中。 实际上,页面工作,除了前后,如果我尝试直接导航到ajax页面/状态。 我知道这是因为我需要在我的popstate函数中设置一些数据,我认为像this.url这样的东西也会在那里工作,就像在我的pushstate函数中一样。(push-state和popstate之间的结合就是我的意思丢失。)

但是如何添加popstate函数?我是否需要为每个页面指定,或者我可以以某种方式说,使用this.url,因为它是在pushstate函数中完成的,并且使用了该状态,因为它保存在pushstate中?

我想我还需要以某种方式链接popstate,在ajaxfuntion中..

第二个问题,不是那么重要的。 为什么我的控制台日志会显示一些jQuery?这是因为我的字体(橘子)的链接是google-apis'链接?因为我没有使用任何jQuery,所以我的索引页面使用的是jQuery,但我认为这是个问题。 在我的控制台中,我有jquery.1.8.2.min.js和collectorjQuery.js 这些来自' googleapis'? :)

我也会添加一个jsfiddle,这会显示我的food_and_health.php页面,以及我的css和js。 (主要是忽略css,只是为了寻找' ok')而添加:

http://jsfiddle.net/y0o39897/4/

cssmenu不会在小提琴中打开,但至少会在chrome和firefox中打开。

这是我的js,我正在苦苦挣扎!

function Food(url) {
    var xmlhttp;
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else { // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            document.getElementById('text').innerHTML = xmlhttp.responseText;
            history.pushState({}, 'foo', url);
        }
    }
    xmlhttp.open("GET", url, true);
    xmlhttp.send();

}

foo.addEventListener('click', function (e) {
    e.preventDefault();
    Food(this.href);
    return false;
}, true);

window.addEventListener("popstate", function(e) {

    console.log(e);

});

我已经阅读了很多关于此的内容,并且我可以理解它; pushstate采用任何状态,在我的例子中是this.url,被点击的url / anchor,并保存该状态。 然后,popstate将使用该状态在该html页面中的ajax页面之间前后导航。 如果我想从page2 / ajaxfile.php导航回page1 / someotherAjaxpage.php,我需要替换状态。这是对的吗?

很抱歉冗长的问题和2个问题合二为一,但由于我是新手,并希望尽可能清楚地了解这一点,并完全理解它,这就是我尝试不使用jQuery的原因。

我很难找到使用ajax-popstate和javascript(不是jQuery)的教程。 感谢您对此的任何帮助:)

0 个答案:

没有答案