作者TonyQ (^^)
看板Ajax
标题Re: [翻译] 「让 AJAX 网页可以被网路爬虫读取」建 …
时间Tue Oct 13 10:43:49 2009
※ 引述《PsMonkey (痞子军团团长)》之铭言:
: 有写 GWT 的可能懂起来比较快
: (是说,我没写过传统的 AJAX,所以这样讲好像也不太可靠 XD)
: TonyQ 讲的有点对又有点不太对
: 现在 #xxxx 就可以连到指定的 resource
: (或着说,产生指定的 resource)
: picasa 我没用不知道,但是 gmail 是这样子处理的
: 这篇要以 search engine 的角度去看,会比较快
: GWT 上头的 Hyperlink(ㄜ... 是个物件,功能上跟 <a> 等意)
: 按下去之後会改变 URL 里头 # (锚点)
: 於是这篇建议,要被 search engine 处理的 URL,就改成「!#=AJAX」
: 更正确讲,是 web server 里头的 headless browser 产生的 HTML 中
: 要被 search engine 处理的 URL 要改成「?_escaped_fragment_=AJAX」
: 大概是这样
: ======
: 反正只是建议书啦,还不用太认真看待 XD
几行推文讲不出我的理解 , 我还是多讲几句好了.
一般的 ajax 操作都是先有格子 -> request -> 有内回来填格子 ,
(要看懂底下的至少要有一点点 js 基础啦 ,
连基础都没有就还请先加强自己功力...orz)
以简单的表格换页来说好了
现在有这样的表格页面 , 请注意这是一个完整的 html page .
假设是 user.html
--------------html start ---------------
---------以上有网页其他区块----------
编号 品名
1 a
2 b
3 c
4 d
5 e
1-5/20 下一页
---------以下有网页其他区块----------
--------------html end-----------------
假设我按下一页是一个 ajax request , 那合理的作法会是
发XMLHttpRequest xxx.php(or asp...视语言而定,总之就是个page) ,
取得
足够以表示下一页的资讯 (可能是纯html , json, xml...)
让我假设最单纯的状况下他是给html , 直接塞 table 的inneHMTL ,
也就是拿到的回应(response)是
-------------------------------------
编号 品名
6 f
7 g
8 h
9 i
10 j
6-10/20 上一页 下一页
-------------------------------------
然後第三个步骤 , 就是把这个 response 透过 innerHTML 塞回去 ,
成为一个新的 full page ,
但是整体上页面都是透过 request 跟 js 在进行.
到这里我重新介绍了一次过去的传统 ajax 流程 ,
至於这份规格书所建议的撰写方式则是在这样的流程下额外增加一些东西.
这边通常需要一些额外的辅助才做得到啦,
像我以前写 jsp 时用的 decorator 就很适合这样做.
我们刚刚总共有的步骤如下
浏览主要页面(页1,user.html) -> 发request -> 收response ->
处理後出现新的页面(页2)
然後新的处理步骤是这样
浏览主要页面(页1,user.html) -> 发request
->
(透过 a ) 将页面标示锚点且用!开头 (像是 #!page2 )
-> 收response -> 处理後产生新的页面 2 (此时url: user.html#!page2)
如果使用者直接连 user.html#!page2 ,
这个页面要能够直接显示页面2的内容 ,这边是基本的 .
再来就是
user.html?_escaped_fragment_=page2
应该要是产出静态(无js辅助)只有内容的 html .
我的理解大概是这样 ,
原则上这还是不脱之前所看到对search engine友善的讨论...
觉得有误的地方再提出来讨论吧 XD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.137.22.216
※ 编辑: TonyQ 来自: 114.137.22.216 (10/13 10:49)
1F:推 lgzenith:我觉得大致上也是这样子,不过原文headless浏览器的部份 10/13 11:00
2F:→ lgzenith:有人可以说明一下吗?这个不是很确定 10/13 11:01
3F:推 PsMonkey:原文有提到一个例子阿... HtmlUnit 10/13 11:47