简体   繁体   中英

@rails_folks | ''http://twitter.com/#!/user/followers" | Please explain

How would you achieve this route in rails 3 and the last stable version 2.3.9 or soish?

Explained

I don't really care about the followers action. What I'm really after is how to create '!#' in the routing.

Also, What's the point of this. Is it syntax or semantics?

Rails doesnt directly get anything after the # . Instead the index page checks that value with javascript and makes an AJAX request to the server based on the url after the # . What routes they use internally to handle that AJAX request I am not sure.

The point is to have a Javascript powered interface, where everyone is on the same "page" but the data in the hashtag allows it to load any custom data on the fly, and without loading a whole new page if you decide to view a different user, for instance.

The hash part is never sent to the URL, but it is a common practice to manipulate the hash to maintain history, and bookmarking for AJAX applications. The only problem being that by using a hash to avoid page reloads, search engines are left behind.

If you had a site with some links,

http://example.com/#home
http://example.com/#movies
http://example.com/#songs

Your AJAXy JavaScript application sees the #home , #movies , and #songs , and knows what kind of data it must load from the server and everything works fine.

However, when a search engine tries to open the same URL, the hash is discarded, and it always sends them to http://example.com/ . As a result the inner pages of your site - home, movies, and songs never get indexed because there was no way to get to them until now.

Google has creating an AJAX crawling specification or more like a contract that allows sites to take full advantage of AJAX while still reaping the benefits of indexing by searching engines. You can read the spec if you want, but the jist of it is a translation process of taking everything that appears after #! and adding it as a querystring parameter.

So if your AJAX links were using #! , then a search engine would translate a URL like,

http://example.com/#!movies

to

http://example.com/?_escaped_fragment_=movies

Your server is supposed to look at this _escaped_fragment_ parameter and respond the same way that your AJAX does.

Note that HTML5's History interface now provides methods to change the address bar path without needing to rely upon the hash fragment to avoid page reloads.

Using the pushState and popState methods

history.pushState(null, "Movies page", "/movies");

you could directly change the URL to http://example.com/movies without causing a page refresh. Search engines can continue to use the same URL that you would be using in that case.

The part after the # in a URI is called the fragment identifier , and it is interpreted by the client, not the server. You cannot route this, because it will never leave the browser.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM