2014-03-04 109 views
1

我使用Firefox V26.0。 JavaScript將始終在所有鏈接上放置一個事件,以便在點擊時發出ajax調用並異步加載頁面。將被加載的內容將是一個JSON字符串。它會解析字符串以獲取所有信息(內容,page_title和uri)。 之後,我的腳本調用window.history.pushstate()來更改瀏覽器的歷史記錄。然後錯誤出現在源代碼中。加載的json字符串將在Firefox V26.0的源代碼中可見。 只有在我的AJAX成功函數中有window.history.pushstate()時纔會出現。 所以一定,因爲也發生錯誤,如果這條線將被註釋掉的問題不是AJAX with 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); 
    }); 
}); 
+0

...沒有人? ...「 – user3292653

+0

」然後錯誤在源代碼中「 - 什麼錯誤? – Quentin

+0

「加載的json字符串將在Firefox V26.0的源代碼中可見。」 - 什麼源代碼?原始網址的源代碼?您使用pushState推送的URL的源代碼?或者,通過DOM檢查器可以看到序列化的活動HTML,它根本不是* source *代碼?或者是其他東西? – Quentin

回答

0

如果你嘗試只用:

var obj = $.parseJSON(json); 
+0

不會改變任何東西給我,對不起 – user3292653

+0

也許你需要添加屬性dataType:'json',你的$ .ajax – burktelefon

+0

不會影響問題。 – user3292653

0

這聽起來像你正在使用pushState設置URI到JSON數據的URI。

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

如果你還沒有,那麼你需要創建該頁面(可能通過複製客戶端JS使用服務器端代碼進行的工作)。

+0

是的,我使用pushState來設置JSON的URI,因爲我從JSON獲得的URI只是鏈接的href。我之所以這樣做的唯一原因是因爲可能會執行服務器端轉發,所以URI不會與鏈接的href屬性相同。那是問題嗎?我不認爲這有什麼好處。這是與JSON一起加載的頁面內容的相對路徑,完全是它的原因。 – user3292653