亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

實現對話式的web應用程序,我想實現的邏輯需要多次對話完成,求指點。

實現對話式的web應用程序,我想實現的邏輯需要多次對話完成,求指點。

RISEBY 2023-05-02 13:09:02
就像填一個登錄表單,每次只填一項,提交一次。大概的形式如下:   --- 第一次請求和響應 ---(客戶端)-->   “我要登錄”                      “請輸入用戶名”  <--(服務器端)         --- 第二次請求和響應 ---(客戶端)-->   “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或者其他的方式來保存狀態。缺點是代碼寫起來不那么符合一般運行的流程,不夠直觀。


查看完整回答
反對 回復 2023-05-04
?
拉莫斯之舞

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');
      }
    }


查看完整回答
反對 回復 2023-05-04
  • 2 回答
  • 0 關注
  • 322 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號