簡體   English   中英

AJAX與history.pushState

[英]AJAX with history.pushState

我正在使用Firefox V26.0。 JavaScript將始終在所有鏈接上放置一個事件,以在單擊時進行ajax調用,並異步加載頁面。 將要加載的內容將是JSON字符串。 它將解析字符串以包含所有信息(內容,page_title和uri)。 之后,我的腳本調用window.history.pushstate()更改瀏覽器的歷史記錄。 然后錯誤出現在源代碼中。 加載的json字符串將在Firefox V26.0的源代碼內部可見。 僅當我的AJAX成功函數中包含window.history.pushstate()時,此選項才會出現。 所以可以確定,問題不在於

$('#ajax_load').html(obj.content);

因為如果此行將被注釋掉,也會發生錯誤。 僅當我使用pushState()時,加載的JSON在源代碼中才可見

我真的不知道為什么會這樣。

這是完整的代碼。 我僅將此腳本與jQuery結合使用,因此沒有其他腳本可以影響該問題

// In combination with jquery-1.9.1.min.js
$(document).ready(function(){
    $('body').addClass('js');
    $.ajaxLoad = function(href, popstate){
        popstate = typeof popstate !== 'undefined' ? popstate : true;
            $.ajax({
                type: 'GET',
                url: href,
                async: false,
                success: function(json){
                    var obj = JSON && JSON.parse(json) || $.parseJSON(json);
                    /**
                        obj will look like
                        {
                            content   : "content",
                            page_title: "Title of Page",
                            uri       : "/path/to/appliction/"
                        }
                    */
                    $('#ajax_load').html(obj.content);
                    if(popstate == true){
                        window.history.pushState({}, obj.page_title, obj.uri);
                    }
                    document.title = obj.page_title;
                    return false;
                },
                error: function(XMLHttpRequest, textStatus, errorThrown){
                    console.log(XMLHttpRequest);
                    return false;
                }
            }); 
    }
    $(document).on("click", 'a:not(".noAjaxLoad")', function(e){
        e.preventDefault();
        $.ajaxLoad($(this).attr("href"), true);
    });
});

如果您僅嘗試以下操作:

var obj = $.parseJSON(json);

聽起來您正在使用pushState將URI設置為JSON數據的URI。

您需要將其設置為要將原始頁面轉換為頁面的URI(使用從JSON獲得的數據)。

如果還沒有,則需要創建該頁面(可能是通過復制客戶端JS與服務器端代碼一起完成的工作)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM