2012-05-17 57 views
0

我想實現類似於用戶流界面的twitter,即當用戶轉到 http://twitter.com/#!/abc頁面被加載。 我試圖在實現這一點:像用戶流接口一樣實現twitter?

http://forum.abhibhatia.co.cc/ajax/ 

我嘗試做的是,一旦加載頁面,網址是由分裂「#/!」和塞康部分被加載,從而http://forum.abhibhatia.co.cc/ajax/posts.php可以訪問在http://forum.abhibhatia.co.cc/ajax/#!/posts.php。我面臨的問題是,我重定向用戶使用window.location 它不起作用後頁面不會改變。我還沒有嘗試過任何其他方式來重定向用戶。 這裏是所使用的JavaScript函數:

function geturl(){ 
    var url=window.location.toString(); 
    var a=url.split("#!/"); 
    if(a.length==1) 
     a[1]='data.php'; 
    return a[1]; 
    } 
function fetchPage(){ 
    var url=geturl(); 
    var xmlhttp; 
    if (url.length==0&&m==1) 
     { url='data.php'; 
     return; 
     } 
    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==1) document.getElementById("data").innerHTML="Loading..."; 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
     var file=xmlhttp.responseText;//alert(file); 
     var contents=file.split("<head>");//alert(contents[0]); 
     var useable=contents[1].split("</head>"); 
     var head=useable[useable.length-2];//alert(head); 
     var body=useable[useable.length-1].split("</body>"); 
     document.getElementById("data").innerHTML=body[0]; 
     document.head.innerHTML=document.head.innerHTML+head; 
     //document.getElementById("data").innerHTML=xmlhttp.responseText; 
     } 
     } 
    xmlhttp.open("GET",url,true); 
    xmlhttp.send(); 
} 
fetchPage(); 
+1

作爲一個方面說明,hashbangs是壞的。 *壞壞壞*!嘗試並使用html5歷史記錄,[pjax](http://pjax.heroku.com/)應該指向正確的方向。 –

+0

你能解釋我爲什麼嗎? –

+1

http://www.quora.com/Are-hashbang-URLs-a-recommended-practice –

回答

0

看看window.location對象接近您可以使用window.location.hash但hashbangs之前提到的是有點老了,這些天我會更傾向於使用使用標準哈希的html5狀態管理#作爲後備。

一些進一步閱讀:

https://developer.mozilla.org/en/DOM/window.location

http://www.adequatelygood.com/2010/7/Saner-HTML5-History-Management

如果你真的想使一個Twitter風格的界面,你應該看看把整個應用程序的一個框架,做這一切爲你像backbone.js,這意味着你只需要使用REST/CRUD風格的數據源,然後爲你實現所有狀態managemet和hash fallback。