亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標題:
jCT與AJAX七宗罪
[打印本頁]
作者:
achun.shx
時間:
2008-11-04 00:04
標題:
jCT與AJAX七宗罪
jCT的更多信息請看我博客里的
jCT專題
,或者
jCT開源主頁示例
里面有最簡單的例子
=======================================================
jCT 3完成后;旧蟡CT短期內就穩(wěn)定了。
剩下的就是應用問題。
雖然使用jCT不一定要使用Ajax.
不過在我的應用當中,jCT配合Ajax是能的到最大發(fā)揮的。
不過大家都知道的AJAX的使用會有一些”罪“!
AJAX
的
七宗罪
“這詞出現(xiàn)的比較早,我引用這個詞,不過在敘述”罪“的時候從新進行了一些詞匯變更,至于是七宗罪還是八宗罪只是個列表問題了。
我現(xiàn)在并
沒有
完全的
把握和信心
在jCT與Ajax的配合上
完全解決
"
Ajax的罪孽
".
有些罪已經(jīng)被”
赦免
"了,有些還在。
先占個位置,此貼會隨著思路不斷更新。
首先我認同這N宗罪確實存在(不評論是否夠的上罪,應該稱作麻煩更好)
其次我剔除了一些明顯由代碼是否優(yōu)良,是否會熟練使用其他工具或者根本就和ajax根本無關的
虛妄之罪
:有些就不發(fā)表個人意見了
編寫復雜、容易出錯
不容易調試
冗余代碼更多
XML是個幌子
ajax不一定要用XML,這個和ajax關系不大.
破壞了Web的原有標準
可以不破壞的,破壞不破壞有技術水平問題,有時候找不到符號標準的時候就要破壞了。其實就算不用ajax,破壞也照樣進行著。
世界這么大卻找不到自己的家,AJAX適用于什么?能干什么?能帶來什么?
ajax不是萬能的,至少目前文件上傳是不支持的。這個罪明顯是個問句,而大家都知道有問題不一定要有答案的。
"罪孽"列表
:
對搜索引擎的支持不好
(2008.10.18注:此方法已經(jīng)通過了實踐的驗證)
這個是兩個問題,首先是要讓SE搜的到,其次是能正確鏈接過來,并且得到的結構要好SE的內容相符合
搜的到首先要解決的是數(shù)據(jù)SE優(yōu)化的問題,這個超出了我們的話題了,
要搜的到其實很簡單,初始頁面上輸出的body里面是有內容的,這些內容就是讓SE看的,然后ajax刷新頁面掉入讓瀏覽器看的頁面就行了。
能正確鏈接過來比較麻煩,根本還是要對給SE的body里面的A的href的url參數(shù)進行合理的設計,這個要看業(yè)務邏輯了。
重點:如果采用
唯一入口
的ajax方式的話,那就有了解決的基礎,SE看到的鏈接永遠都是來自與這個唯一入口地址的,僅僅是參數(shù)不同而已,
那剩下的就是要在瀏覽器上從新分析這個url參數(shù)使之調出相應的數(shù)據(jù)了.
原理基本如此,實作還要看業(yè)務邏輯,我的應用目前還沒有動手做這個,不過很快就會開始的。希望我能解決
今天(2008.9.28上午)終于有時間做搜索引擎的輸出了
.很容易的僅僅用了兩個小時就完成了,道理很簡單.只要瀏覽器打開網(wǎng)站,最第一頁中始終都有一個沒有樣式的輸出結果,但是由于這個結果會在js執(zhí)行的時候被替換掉,所以可能瀏覽器上根本沒有來得及看到結果,但是如果你把js屏蔽掉就看到了,這就是給搜索引擎看的東西.
現(xiàn)在就可以屏蔽掉js看看
www.xxx.xxx
(很遺憾,由于人事變動,我不再參與這個項目了,項目負責人回到了古老的編程方法,回頭有新的站我再給出新的地址吧)輸出吧.其實對于搜索引擎的輸出很多東西都不必要顯示的,所以在xxx這個站上僅僅需要輸出類表和詳細信息兩種行為就行了.剩下的就是如何把由搜索引擎過來的地址轉換到正確的頁面就行了.因為在xxx的設計中所有參數(shù)的名稱和結構,ajax的方法和對搜索引擎輸出的方法完全一致因此做起來相對容易,就算不一致也只不過的費點代碼翻譯一下就OK了.這個工作就留到下午做吧
沒有back和history
這個也有解決方案的搜一下'Ajax 前進后退',這個用的是iframe的方法
還有dhtmlhistory.js這個開源的庫
不過這些方法我都不想照搬,綜合一下和jCT配套的方案
:
寫了一個hisStory的對象,專門用來管理hisstory,先看代碼
Js代碼
//ajax歷史控制
var hisStory={
init:function(){//初始化iframe對象通過更改iframe的src中的參數(shù),也就是說主要技術還是用iframe的方法
var id='#hisStoryFrame';
$(id).remove();
this.at=0;
this.his=[];
$('body').append('<iframe id="hisStoryFrame" src="/hisstory.html?0" height="0px" frameborder="no"></iframe>');
this.elm=$(id);
},
same:function(argsn,his){//判斷是否是同一個刷新,同一個刷新不加歷史
var args=his||[];
var arg=argsn[2]||[];
var argi=args[2]||[];
var same=true;
if(argsn[0]==args[0] && argsn[1]==args[1] && arg.length==argi.length)
for (var i=0;i<arg.length ;i++) {
if(arg[i]!=argi[i]){
same=false;
break;
}
}
else
same=false;
return same;
},
add:function(){//增加歷史,其參數(shù)是第一參數(shù)是要回調的函數(shù)的this,第二參數(shù)是要回調的函數(shù),第三參數(shù)是要回調的參數(shù)數(shù)組,
if(this.same(arguments,this.his[this.at])) return;
this.his=this.his.slice(0,this.at+1);
this.at=this.his.length;
this.his.push(arguments);
this.elm.attr('src','/hisstory.html?'+(this.at));
},
go:function(url){//前進或后退
var pos=url.indexOf('?');
this.at=parseInt(url.slice(pos+1));
if(!this.his[this.at]) return;
var p=this.his[this.at][0];
var fun=this.his[this.at][1];
var arg=this.his[this.at][2]||[];
if(typeof fun=='function') fun.apply(p,arg);
},
his:[]//歷史記錄數(shù)組
}
復制代碼
相應的hisstory.html
Html代碼
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<script>
var url=window.location.href;
if(parent && parent.hisStory) parent.hisStory.go(url);
</script>
</head>
<body></body></html>
復制代碼
這種方法的原理就是:雖然ajax的頁面是無刷新的,但是如果里面有嵌入的iframe,而iframe所指定的url變化的話,瀏覽器的歷史后退前進就會生效,并且直接對應
iframe里的變化.hisstory.html里的javascript就是調用上級頁面里hisStory對象的go方法進行對應的處理.
關鍵在于使用時,再什么時候調用hisStory.add方法?這個要看應用和業(yè)務邏輯了.
hisStory.init的調用就簡單了,當頁面上的body被更新后就調用,而且要保證以后iframe不會被覆蓋掉,這是個簡單DOM組織問題了.
用戶刷新當前頁面,如何保證刷新后的頁面與刷新前保持一致
找到了思路,現(xiàn)在還沒有實現(xiàn),這個方法就是利用window.name屬性具有長生命周期的特點?戳诉@個屬性還應該有很多的其他可利用價值,比如說當數(shù)據(jù)緩存用。要好好考慮一下
任由內存溢出
這個雖然根源來自javascript實現(xiàn),不過確實不容易解決,這應該是個專題
多個異步XHR完成不同的任務,如何保證當前context中的數(shù)據(jù)的獨占或者lock
引用JE上的回答
:
醒來 寫道
包含業(yè)務邏輯,自然是要自己編程解決。
dlee 寫道
對每個需要保護的內容,設置一個 flag,實現(xiàn)排它鎖的機制。
對于我來說也有一個解決辦法就是
降低前后臺業(yè)務邏輯上的耦合度,前后臺細粒度數(shù)據(jù)通訊的方法
[
本帖最后由 achun.shx 于 2008-11-4 00:33 編輯
]
作者:
tomorrow819
時間:
2008-11-04 10:10
仁者見仁,智者見智吧,看需求了
作者:
mz198424
時間:
2008-11-07 12:26
標題:
回復 #1 achun.shx 的帖子
我倒,還有這么起名的?
作者:
achun.shx
時間:
2008-11-07 19:10
原帖由
mz198424
于 2008-11-7 12:26 發(fā)表
我倒,還有這么起名的?
呵呵,
雖然用jCT不一定要有ajax,
不過jCT和ajax搭配使用確實是絕配.至少我的所有項目都是這么干的,但是ajax的"罪孽深重 ",
雖然這些問題不是jCT造成的.但這些問題必須解決,所以這個名字并不是標題黨.是很實在的,
歡迎光臨 Chinaunix (http://www.72891.cn/)
Powered by Discuz! X3.2