请教一下搜索和搜索结果页面分离如何参数传递? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
HariopaNic
V2EX    Web Dev

请教一下搜索和搜索结果页面分离如何参数传递?

  •  
  •   HariopaNic 2024-06-19 17:44:55 +08:00 2352 次点击
    这是一个创建于 478 天前的主题,其中的信息可能已经有所发展或是发生改变。

    场景:两个页面,在页面 1 进行搜索配置后跳转页面 2 获取并且展示搜索结果;

    痛点是:页面 1 配置出来的参数比较复杂,不适合放进 url 中;

    希望刷新,或者重新打开页面 2 依旧可以传递正确的参数给后端获取结果;

    除了将该数据放进浏览器缓存中,还有别的方法么?

    16 条回复    2024-06-20 12:26:52 +08:00
    iOCZS
        1
    iOCZS  
       2024-06-19 17:49:35 +08:00
    把参数存本地
    HariopaNic
        2
    HariopaNic  
    OP
       2024-06-19 17:52:25 +08:00
    @iOCZS localStorage 和 sessionStorage ?有别的方案么
    rbe
        3
    rbe  
       2024-06-19 18:02:15 +08:00
    放不进 url 的原因是什么呢?如果是担心 url 编码或者长度的问题,可以用一些特殊的算法来解决,比如把参数用 lz-string 处理一下。typescript playground 就是用这种方式在 url 传递参数的。

    https://github.com/pieroxy/lz-string
    iOCZS
        4
    iOCZS  
       2024-06-19 18:03:11 +08:00
    @HariopaNic 没必要想太多,你想想有哪些场景,这个做法是不是能覆盖到就好了。如果我打开多个标签会不会有影响,如果我直接去了第二页会怎么样。。。。
    HariopaNic
        5
    HariopaNic  
    OP
       2024-06-19 18:09:42 +08:00
    @iOCZS 如果浏览器缓存被清除,或者用别的浏览器打开(包括 url 分享给别人等情形)都无法获取正确结果。
    iOCZS
        6
    iOCZS  
       2024-06-19 18:15:55 +08:00
    @HariopaNic 参数加密,你第一页提交参数,后端下发一个 id 给你,它把参数存起来,你拿着 id 去请求列表数据
    iBatis
        7
    iBatis  
       2024-06-19 18:16:03 +08:00 via Android
    如果后端支持,放 redis
    iOCZS
        8
    iOCZS  
       2024-06-19 18:17:15 +08:00
    @HariopaNic 下发 id 或者把 id 放在重定向链接里
    HariopaNic
        9
    HariopaNic  
    OP
       2024-06-19 18:25:05 +08:00
    @rbe 谢谢大佬告知这个库,我刚试了下还是比较长,准备叫后端开个接口了。
    HariopaNic
        10
    HariopaNic  
    OP
       2024-06-19 18:25:32 +08:00
    @iOCZS 嗯,本来不想后端参与的,现在看还是得找后端存。
    jevonszmx
        11
    jevonszmx  
       2024-06-19 18:25:49 +08:00
    第一页本地记一个 token ,参数提交到后端,用 token 为 key 来记参数,后面不管几个页面,只要正确传 token 就好
    summerwar
        12
    summerwar  
       2024-06-19 18:29:13 +08:00
    类似于短网址的办法,把长参数生成一个短代码,然后存到后台 redis 里,然后传短代码参数传到 url 中,然后结果页获取短代码,去 redis 中获取长参数,然后返回结果。
    xuelu520
        13
    xuelu520  
       2024-06-19 18:29:23 +08:00   1
    我觉得你的想法就是有问题的。
    参数就应该放 url 中,如果被缓存,那应该处理掉缓存,不应该本末倒置。
    参考搜索头部几家,参数够复杂了吧,也都是走的 url
    HariopaNic
        14
    HariopaNic  
    OP
       2024-06-19 18:39:11 +08:00
    @xuelu520 头部搜索库的参数很少啊,除了问句好像也没啥。我的场景是:页面有多个实体,每一个实体有多个属性,每一个属性能配置多条搜索规则(字段是否等于,包含,大于,小于.....某个输入属性)。这可太长了。
    HariopaNic
        15
    HariopaNic  
    OP
       2024-06-19 18:40:18 +08:00
    @jevonszmx 那把结果页面分享给别人就不行了吧?
    jevonszmx
        16
    jevonszmx  
       2024-06-20 12:26:52 +08:00
    @HariopaNic 如果你要做分享,那就要记住 token 和当前用户的关系(记录 token A 和用户 A ),被分享的人打开后分配一个新的 token (记录 token B 和用户 B ),然后系统关联两个 token 的关系,这样就可以关联起来了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2982 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 00:30 PVG 08:30 LAX 17:30 JFK 20:30
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86