首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
宝塔
V2EX  ›  程序员

Ajax 直接返回 html 片段

  •  
  •   mutelog · 302 天前 via iPhone · 3059 次点击
    这是一个创建于 302 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Ajax 直接根据业务实体生成并返回 html 片段是否一定是糟糕的设计?
    49 回复  |  直到 2019-01-24 14:59:53 +08:00
        1
    Vegetable   302 天前 via iPhone
    想洗一下发现功力不够,我觉得肯定有合适的场景,不比其他方案差,但是我想不出来…
        2
    qq292382270   302 天前
    要么服务端返回 html, 要么 js 通过返回的 data 拼接成 html,并未有多大的区别吧 .
        3
    CODEWEA   302 天前   ♥ 1
    技术方案一定要符合业务实际需求
    直接返回 HTML 片段的优势有:减少客户端负载,减少维护成本,客户端体验更流畅。
    劣势:逻辑拼接增加服务器负载,技术人员会看起来很 low,不符合潮流,不利于接口重用(要考虑是否真的需要重用,已经重用成本)
        4
    CODEWEA   302 天前
    以及重用成本
        5
    akatquas   302 天前 via iPhone   ♥ 1
    ajax 原名就是 XMLHttpRequest 啊...
    返回 xml 没毛病,只不过现实场景不多用了,http 请求中大多都用字符串如 json 了而已。

    我这个洗的还好吗?
        6
    saulshao   302 天前
    返回 HTML 片段绝大多数是糟糕的设计。
    需要用到 Ajax 的时候,都是将结果作为某个整体 HTML 页面的一部分。
    大多数的设计都是返回 Json/XML 甚至是自定义的字符串。
    对比返回 HTML 片段的设计,如果返回的 HTML 片段不能作为整体页面的一部分来显示,典型的例子是 Ajax 返回一个 HTML 表格,以 Table 开头,有的时候需要把这个表格的某列显示为一个链接,有的时候则不需要。那么就是要么设计 2 个不同的 Ajax API,要么就分析 HTML 片段,显然这都不是什么很好的办法。
        7
    CODEWEA   302 天前
    @saulshao 你的意思是不利于接口复用吧
        8
    580a388da131   302 天前 via iPhone
    你把数据和样式分开,最后送到客户端 html,这样应该凑合吧。
        9
    akira   302 天前
    如果前端和后台都是你一个人在做,以后也一直是你一个人在维护,那没关系
        11
    KasuganoSoras   302 天前
    并不觉得有什么不好,有时候直接返回 html 还是挺方便的
    比如: https://mirror.ssr.wine/ 评论区 AJAX 轮询、选择服务端分类
    还有: https://www.zerobbs.net/ 帖子列表翻页,评论区 WebSocket
    怎么方便怎么来,看自己喜欢。除非你是在帮别人做项目,那就按照别人的要求来做吧
    就我个人而言,因为我并不擅长前端的 Js 那些的,我觉得直接在服务端写 HTML 更方便点,自然我会选择在 AJAX 里返回 HTML。

    我这个洗的还好吗?
        12
    FEDT   302 天前 via iPhone
    Pjax,看看 gayhub
        13
    yunye   302 天前
    turbolinks 岂不是 low 翻天了
        14
    azh7138m   302 天前 via Android
    gitlab 也这么操作,问题不大
        15
    byis   302 天前 via Android
    pjax
    喵喵喵?
        16
    byis   302 天前 via Android
    虎嗅网就是这样的
        17
    masker   302 天前 via Android
    不都是字符串咩?
        18
    msg7086   302 天前
    都可以,根据实际需要返回数据就行了。
        19
    Archeb   302 天前
    一般应用在 pjax
        20
    hundan   302 天前 via Android
    我知道新浪微博的评论加载是这样的
        21
    ChefIsAwesome   302 天前
    跟套模板一个道理。前端写好 html 给后端套,之后再要改了就费劲。
        22
    66beta   302 天前 via Android   ♥ 1
    你这是模块化服务端渲染,简称 mssr,说不定成为今年流行!

    可还行?
        23
    yinqi025   302 天前
    这样直接返回 Html 不说性能什么的, 维护工作就很麻烦!!!!谁知道你后台组装了多少 html
        24
    ebingtel   302 天前
    脱离应用场景和需求讨论这个有啥意义……
        25
    hasbug   302 天前
    比较难配合工作,后期维护成本也高,反正···
        26
    hasbug   302 天前
    6 年前都这么干,然后天天页面布局错乱,找了半天,后端自己拼的 html 少各种结束标签···
        27
    zwb9412   302 天前 via Android   ♥ 1
    遇到过返回 html 的 里面还带 js 脚本,js 脚本有 bug 极难调试。。
        28
    brofen   302 天前
    微博好像是这么干的
        29
    keelii   302 天前
    恰恰相反,很多时候返回 html 其实更方便,也更具有跨应用的复用性。唯一问题就是 HTML 代码比较冗余,需要考虑 HTTP 请求传输数据量的问题。
        30
    fkdog   302 天前
    微博、apple 官网各种这么干。
    根据自己实际来。
        31
    vinsony   302 天前
    没毛病,10 年前我就是这么干的
        32
    qinxi   302 天前
    微博翻页就是这样啊
        33
    carlclone   302 天前
    pjax , 没毛病
        34
    guanhui07   302 天前
    区别不大 看那一层套上模板。
        35
    sambawy   302 天前
    脱离现实场景聊这个就是耍流氓
        36
    lymi2771   302 天前 via iPhone
    我觉得没有任何问题
    有人说不利于接口复用 我觉得这个 route 就是需要返回一个 view 也没什么问题吧? 不然普通的页面怎么访问的呢

    服务端渲染这样的场景我觉得还是很多的
        37
    zst   302 天前 via Android
    twitter 也这么干的 23333
        38
    BOYPT   302 天前
    没问题呀,而且这个技术还有专门的名词:服务器端渲染
        39
    ioven   302 天前
    很 low,可自己用的很爽
        40
    Yiki   302 天前
    传 svg 算不算 html 片段
    前端也省事儿,不能太片面吧
        41
    mostkia   302 天前
    只要前后台不打起来,用什么交换数据都是 ok 吧。。我是前后台都做,感觉无所谓,但一般使用 json 吧,数据和表现分离,后期好维护一些,有时候想改改版面也更方便,但又需要的情况下,直接返回 html 我感觉并无什么不妥。
        42
    FakeLeung   302 天前
    low 咋滴啦?用的爽就好了。
        43
    doodlewind   302 天前
    我是搞前端编辑器的,简单来说,假如我的业务场景(编辑器)动态性非常强,那么一些插件就需要依赖后端的能力来生成 html 返回给前端,这时候接口里包含 html 片段也是可能的呀,至少据我所知 confluence 的富文本编辑器就是这么干的。

    当然了 confluence 这个编辑器的架构设计是前后端不分离的,编辑器插件都是 jar 包,现在的前端架构设计应该可以杜绝这样的实践了吧。
        44
    SakuraKuma   302 天前
    很多都这么干好嘛..
        45
    tao1991123   302 天前
    pjax 没毛病
        46
    miniwade514   302 天前
    简单地理解,这个方案只是把 HTML 放到服务端渲染了。
    应该也不存在接口不好复用的问题,你在服务端把渲染 HTML 的服务和数据服务拆分成两层,数据服务也是可复用的。
    适合前端交互不复杂的场景。
        47
    litbear   302 天前
    pjax 啊
        48
    meepo3927   302 天前
    后端写 HTML 体验很差吧 , 字符串拼接?
        49
    Dogergo   302 天前
    有一个场景,新旧产品都需要我点击名称的时候弹出一个弹窗,但是根据新旧产品的不同,弹窗样式包括数据个数发生了很大变化,我弹窗层用的是 layer,我放在前端 js 里去判断是不是不太好,而我如果放在服务端,我之需要一个接口,拼接好 html,分配变量进去,返回,很完美,代码复用性更好。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2344 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 45ms · UTC 12:30 · PVG 20:30 · LAX 04:30 · JFK 07:30
    ♥ Do have faith in what you're doing.