2011-06-14 128 views
1

jquery非常沉重和臃腫。不幸的是,我不知道如何編寫「真正的」JavaScript代碼。將jquery ajax轉換爲標準javascript

我有這樣的代碼:

$(document).ready(function() { 
    if(window.navigator.standalone){ 
     $('a').click(function(e) { 
      e.preventDefault(); 
      $("body").load(this.href); 
     }); 
    } 
}); 

有人能幫助我一起變身爲真正的JavaScript這種方式? 我將如何替換負載()?非常感謝:)

+6

如果您發現jquery臃腫,請等待,看看您的「真實」javascript會是什麼樣,一旦適用於所有平臺上運行:) – pixeline 2011-06-14 19:21:32

回答

3

並不十分複雜:

window.onload= function() { 
    if (!navigator.standalone) return; 
    for (var i= document.links.length; i-->0;) { 
     document.links[i].onclick= function() { 
      var req= new XMLHttpRequest(); 
      req.onreadystatechange= function() { 
       if (this.readyState!==4) return; 
       document.body.innerHTML= this.responseText; 
      }; 
      req.open('GET', this.href, true); 
      req.send(); 
      return false; 
     }; 
    } 
}; 

如果要對IE6 XMLHttpRequest的工作,如果這是你所關心的一切,你需要先定義此:

if (!window.XMLHttpRequest && 'ActiveXObject' in window) { 
    window.XMLHttpRequest= function() { 
     return new ActiveXObject('MSXML2.XMLHttp'); 
    }; 
} 

這真的有就是這樣。

但是,對於通用的網頁,你不應該這樣做;不在本地JavaScript中,也不在jQuery中。將內容添加到現有頁面中會破壞瀏覽器的導航功能,並將其替換爲空白。後退和前進按鈕現在不再工作。用戶不能爲他們喜歡的頁面添加書籤,或將鏈接發送給其他人。這是對幀最糟糕的可用性問題的重新發明,不應該在開放的網絡上完成,而不需要額外的工作來爲搜索引擎實現HTML5歷史導航和hashbang後備導航。

+0

我會謹慎反對在「你永遠不應該做這個」評論中投入太多股票。有很多情況下你想要加載額外的內容,而無需重新加載整個頁面。在加載全新內容時,歷史是相關的,但在加載評論,詳細信息,附加圖像等內容時可能沒有那麼多。 – 2011-06-14 20:03:08

+1

我不知道,我希望能夠鏈接到評論或特定的細節;向某人發送一個說明「http://www.example.com/」的「鏈接」,然後點擊「打開詳細信息」,然後打開第三個評論「吸引」。有一種很好的方法可以通過腳本來處理,但它涉及到一些棘手的歷史和hashbang代碼(或者一個可以幫你實現的插件)。大多數人不會爲此而困擾,並以不可訪問的頁面結束。 – bobince 2011-06-14 20:07:38

+0

這裏只適用於iphone上的全屏視圖:)。所以沒有導航,這就是爲什麼有「navigator.standalone」。 – cmplieger 2011-06-14 21:29:04

2

是不是jQuery 真正的javascript你?如果你的意思是沒有任何框架的原始JavaScript,那麼你需要一個XmlHttpRequest(準備自己編寫絕對數量的代碼,也準備好讓這些代碼在不同瀏覽器中工作不一致,獲得錯誤,頭痛等)。

結論:使用jQuery並很開心。

+2

是的我的意思是原始的JavaScript。這是一個移動框架。而只是添加jQuery的5行是在我看來有點愚蠢:)。 – cmplieger 2011-06-14 19:21:55

+0

感謝您的鏈接,我會看看:) – cmplieger 2011-06-14 19:22:08

+0

@SnippetSpace,5行???相信我,如果你不使用jQuery,那麼等待你的是真正的恐怖:-)我們都經歷過它。一旦你經歷了它,你可能會很欣賞人們爲創建js框架(如jQuery)所做的努力。如果您擔心性能或其他問題,請從Google CDN提供服務,但客戶已將其緩存起來並且無需重新下載,因爲許多網站已將其用於此目的。 – 2011-06-14 19:22:57