就像填一個登錄表單,每次只填一項,提交一次。大概的形式如下: --- 第一次請求和響應 ---(客戶端)--> “我要登錄”
“請輸入用戶名” <--(服務器端) --- 第二次請求和響應 ---(客戶端)--> “myname”
“請輸入密碼” <--(服務器端)--- 第三次請求和響應 ---(客戶端)--> “password”
“登錄成功” <--(服務器端)一次完整的業務是有多次連續的請求完成的,可以理解成三個請求是一個事務。當然用session記錄每一次提交的,來操作也是可以的。但我看了一些關于異步IO的文章,是不是可以實現異步方式,第一次請求的時候啟動一個handle,等待以后幾次請求,湊齊用戶名和密碼在返回登錄結果。def process_request(request):
request_handle(request)def request_handle(request):
wait_for_next_request(request):
2 回答

Cats萌萌
TA貢獻1805條經驗 獲得超9個贊
如果能從backend所用的語言和framework上入手會簡單得很多。
很多(不怎么流行的)web framework都是基于continuation的,比如Smalltalk的Seaside,Python的Nagare,等等。這些framework通常都利用了語言本身提供的保存當前continuation的功能,使得服務器端的函數可以在運行中途暫時停止,將函數運行的狀態serialize到數據庫中,等前端返回新的信息時再將保存的函數狀態恢復,繼續運行。這樣做的好處是運行的流程沒有受到太大的影響,程序員可以很容易地就適應這種寫法。
另一種不需要語言和framework支持的方式則需要刻意將每一步的狀態都保存到數據庫里。這樣做的話,可以通過session或者其他的方式來保存狀態。缺點是代碼寫起來不那么符合一般運行的流程,不夠直觀。

拉莫斯之舞
TA貢獻1820條經驗 獲得超10個贊
你問題中的示例情景,建議以:前端與用戶交互問答,保存用戶回答數據,到最后一步一次性提交的方式來實現。
如果在每次問答都需提交驗證一次數據的場景中,我們就得知道:web client 與 server 的交互是無狀態的,因此,服務端對客戶端的身份識別,必然需要一個憑證,來做為雙方數據交互的基礎。這個憑證可以使用 cookie 來保存,讓真正的數據保存在服務端。
你也可以這么做,把數據保存在JS對象中,到最后一步來驗證
//狀態對象 var obj = { a1: false, a2: false, a3: false } //綁定用戶輸入完成事件,提交數據 $.ajax({ url: "http://ooxx.cn/a1", success:function(a1){ obj.a1 = a1 } }); $.ajax({ url: "http://ooxx.cn/a2", success:function(a2){ obj.a2 = a2 } }); $.ajax({ url: "http://ooxx.cn/a2", success:function(a3){ obj.a2 = a3; //驗證有效性 if(obj.a1 && obj.a2 &&obj.a3){ console.log('ok'); } }
- 2 回答
- 0 關注
- 322 瀏覽
添加回答
舉報
0/150
提交
取消