V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
HariopaNic
V2EX  ›  Web Dev

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

  •  
  •   HariopaNic · 7 天前 · 541 次点击

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

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

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

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

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

    https://github.com/pieroxy/lz-string
    iOCZS
        4
    iOCZS  
       7 天前
    @HariopaNic 没必要想太多,你想想有哪些场景,这个做法是不是能覆盖到就好了。如果我打开多个标签会不会有影响,如果我直接去了第二页会怎么样。。。。
    HariopaNic
        5
    HariopaNic  
    OP
       7 天前
    @iOCZS 如果浏览器缓存被清除,或者用别的浏览器打开(包括 url 分享给别人等情形)都无法获取正确结果。
    iOCZS
        6
    iOCZS  
       7 天前
    @HariopaNic 参数加密,你第一页提交参数,后端下发一个 id 给你,它把参数存起来,你拿着 id 去请求列表数据
    iBatis
        7
    iBatis  
       7 天前 via Android
    如果后端支持,放 redis
    iOCZS
        8
    iOCZS  
       7 天前
    @HariopaNic 下发 id 或者把 id 放在重定向链接里
    HariopaNic
        9
    HariopaNic  
    OP
       7 天前
    @rbe 谢谢大佬告知这个库,我刚试了下还是比较长,准备叫后端开个接口了。
    HariopaNic
        10
    HariopaNic  
    OP
       7 天前
    @iOCZS 嗯,本来不想后端参与的,现在看还是得找后端存。
    jevonszmx
        11
    jevonszmx  
       7 天前
    第一页本地记一个 token ,参数提交到后端,用 token 为 key 来记参数,后面不管几个页面,只要正确传 token 就好
    summerwar
        12
    summerwar  
       7 天前
    类似于短网址的办法,把长参数生成一个短代码,然后存到后台 redis 里,然后传短代码参数传到 url 中,然后结果页获取短代码,去 redis 中获取长参数,然后返回结果。
    xuelu520
        13
    xuelu520  
       7 天前   ❤️ 1
    我觉得你的想法就是有问题的。
    参数就应该放 url 中,如果被缓存,那应该处理掉缓存,不应该本末倒置。
    参考搜索头部几家,参数够复杂了吧,也都是走的 url
    HariopaNic
        14
    HariopaNic  
    OP
       7 天前
    @xuelu520 头部搜索库的参数很少啊,除了问句好像也没啥。我的场景是:页面有多个实体,每一个实体有多个属性,每一个属性能配置多条搜索规则(字段是否等于,包含,大于,小于.....某个输入属性)。这可太长了。
    HariopaNic
        15
    HariopaNic  
    OP
       7 天前
    @jevonszmx 那把结果页面分享给别人就不行了吧?
    jevonszmx
        16
    jevonszmx  
       7 天前
    @HariopaNic 如果你要做分享,那就要记住 token 和当前用户的关系(记录 token A 和用户 A ),被分享的人打开后分配一个新的 token (记录 token B 和用户 B ),然后系统关联两个 token 的关系,这样就可以关联起来了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5028 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 07:17 · PVG 15:17 · LAX 00:17 · JFK 03:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.