用了这些久 ajax 为什么感觉 ajax 直接返回 html 用得少啊 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
simple2025
0D
V2EX    Javascript

用了这些久 ajax 为什么感觉 ajax 直接返回 html 用得少啊

  •  
  •   simple2025 2017-02-25 16:00:07 +08:00 5834 次点击
    这是一个创建于 3201 天前的主题,其中的信息可能已经有所发展或是发生改变。

    感觉一般 ajax 都是直接返回 json. 难道是因为 html 比 json 大的原因?

    第 1 条附言    2017-02-26 11:35:56 +08:00

    看了这么多回复,大概的原因是这个

    1. 前后端分离.(但是我的管理后台,不需要前端,用bootstrap就好了,所以pass)
    2. 减少带宽。(我的管理后台不怎么在乎性能,用的没有几个人。pass)
    3. 降低服务器的cpu。(我现在服务器cpu不到50%,pass)
    4. 移动端。(没有移动端。。要有移动端的话,就需要前端来写样式了。。所以还是pass)

    所以我直接返回html,对我这个项目是合适的?

    36 条回复    2017-02-27 12:50:33 +08:00
    Luckyray
        1
    Luckyray  
       2017-02-25 16:03:43 +08:00 via iPhone
    还得后台渲染是不是加重了负担?
    RE
        2
    RE  
       2017-02-25 16:09:53 +08:00
    用 ajax 的其中一个目的就是服务端只处理业务,然后返回业务处理后的结果,以 json 格式返回,就可以做到前后端分离了。
    如果返回 html ,那后端开发的时候还得去考虑到底某句话要放在什么标签里面,某个地方要搭配什么 icon 用什么 css ,而这些本应该是前端的工作。
    oisc
        3
    oisc  
       2017-02-25 16:12:39 +08:00   1
    HTML --> HyperText Markup Language ,是标记语言,不是数据结构
    simple2025
        4
    simple2025  
    OP
       2017-02-25 16:13:19 +08:00
    @RE 是为了前后端的目的是吧,那如果是一个管理后台这种几乎不需要前端的,那就可以返回 html 了?
    Cbdy
        5
    Cbdy  
       2017-02-25 16:27:12 +08:00 via Android
    早期 jquery 的 onload 没有用过吗?
    cooro
        6
    cooro  
       2017-02-25 16:59:50 +08:00 via iPhone
    @chenqh 管理后台几乎不需要前端?那这种 web 程序都可以直接静态网页就够了!
    simple2025
        7
    simple2025  
    OP
       2017-02-25 17:02:41 +08:00 via iPhone
    @cooro 用 bootstrap 就好了呀 ,小公司后端样式不怎么看重,看重也没办法
    loading
        8
    loading  
       2017-02-25 17:08:09 +08:00 via Android
    有返回 xml 的,你指的应该是这个吧。
    kindjeff
        9
    kindjeff  
       2017-02-25 17:08:21 +08:00 via iPhone
    b 站搜索页面点下一页返回的就是个 html 然后嵌进去的。
    simple2025
        10
    simple2025  
    OP
       2017-02-25 17:09:24 +08:00
    @kindjeff 那种估计是 pjax ,那种东西不会用
    Reign
        11
    Reign  
       2017-02-25 17:12:14 +08:00
    万一前端模板变了啊
    kindjeff
        12
    kindjeff  
       2017-02-25 17:12:37 +08:00 via iPhone
    @chenqh 那你这贴有结论了……因为返回 html 的你定义为 pjax 了……
    cooro
        13
    cooro  
       2017-02-25 17:16:29 +08:00 via iPhone
    麻雀虽小,该有的都得有。后台管理不只是样式吧。前期图“省事”(还不一定),后期就费劲了。
    simple2025
        14
    simple2025  
    OP
       2017-02-25 17:49:28 +08:00
    @kindjeff 不一样啊,那种不仅返回的是 html 并且好像 page 的变化也要表现在 history 里面
    doubleflower
        15
    doubleflower  
       2017-02-25 18:51:50 +08:00
    几年前 ajax 刚开始的时候大家都返回 html 直接替换一块 dom 的。直到后来前端开始有架构了,从 backbone 开始,到 angular/react 才没人这么干了。
    Mbin
        16
    Mbin  
       2017-02-25 18:58:20 +08:00
    比如现在的 express + ejs 模板,这种就是直接返回 html 模服务器渲染的,现在也是油公司这样开发的,配合内部框架,前后台一人搞定
    bombless
        17
    bombless  
       2017-02-25 18:58:56 +08:00 via Android
    backbone 貌似就是返回 html 的,没用过
    helloccav
        18
    helloccav  
       2017-02-25 19:01:42 +08:00 via Android
    @RE 对我个人来说,因为我要同时做前端和后端,所以我的 ajax 一般是返回 html ,这样我的 html 代码就可以复用了
    sfree2005
        19
    sfree2005  
       2017-02-25 19:28:17 +08:00
    还有考虑到移动端的需要, 前后端分离其中的一个好处
    jsq2627
        20
    jsq2627  
       2017-02-25 19:32:19 +08:00 via iPhone
    上古时代 ajax 确实主要返回 xml 和 html
    lightening
        21
    lightening  
       2017-02-25 19:51:04 +08:00
    不少。看 Pjax 和 Turbolinks 。 React 也可以 server 端 render 。前端不复杂(仅仅需要无刷新跳转,而不是类似 gmail 这样的页面内逻辑)的网站用这种方式更方便。

    我现在比较偏向与用这种方式再在需要复杂前端的页面嵌入 React 。
    k9982874
        22
    k9982874  
       2017-02-25 20:02:29 +08:00 via iPad
    不少啊,返回的 500 错误都是 html 啊,(斜眼笑
    xrlin
        23
    xrlin  
       2017-02-25 20:38:34 +08:00
    用 rails 的时候偶尔会这么干,虽然感觉不太好,但比在前端用 js 写逻辑方便多了。
    hoythan
        24
    hoythan  
       2017-02-25 21:46:46 +08:00
    分页和无刷新加载我都是使用 ajax 返回 html, 直接用 ajax 获取下一页地址然后获取到下一页的 html, 直接填充到当前网页就行了.
    rekulas
        25
    rekulas  
       2017-02-25 22:15:23 +08:00
    @chenqh 一样的工作原理,只不过现在浏览器支持 pushstate 了 为了体验好很多网站就顺便更新了地址栏而已。
    halden
        26
    halden  
       2017-02-26 01:12:02 +08:00
    除去上面已经提到的前后端分离,还有性能的影响,现在前端很少直接写整个 html 的了,而且现在“需要”返回 html 的情况非常少吧,除非你说要替换大部分 dom ,有点类似潜入 iframe 的感觉,但这是有具体需求的情况下才会这样用(比如防止 js/css 污染等,绝大多数在线 code 编辑器都是用的 iframe )

    @helloccav 并没有理解你所说代码复用是什么情况, html 作为 view 本来就是复用的,但这和返回 json 并不冲突啊, html(layout 不变) + json(数据动态变化) -> 完整页面
    jarell
        27
    jarell  
       2017-02-26 01:21:16 +08:00
    @rekulas gmail 好像只更新了 #号后面内容, 而且很久之前就是这样了,不知道它用的什么方案。
    hst001
        28
    hst001  
       2017-02-26 01:32:51 +08:00
    1 、减少服务端渲染的步骤,节约服务器的资源
    2 、前后端分离,可以让一个接口服务不同的前端,前端爱怎么渲染怎么渲染,这里的前端当然包括移动端等
    3 、只传数据可以减少传输的字节,节约带宽就是节约金钱
    vibbow
        29
    vibbow  
       2017-02-26 01:57:13 +08:00
    我之前的单位就是这样做的, ajax 直接返回 html 。

    还有把整个 dom 干掉, ajax load 一个新的 html 到页面上,也是经常用的......
    #所谓的无缝刷新...
    Tink
        30
    Tink  
    PRO
       2017-02-26 10:17:47 +08:00 via iPhone
    看你怎么用,我自己一个人写都是返回 json
    gouflv
        31
    gouflv  
       2017-02-26 10:43:24 +08:00 via iPhone
    你可以查下前后端分离的具体做法
    leopku
        32
    leopku  
       2017-02-26 11:08:26 +08:00
    踩过坑就知道为啥以前流行的 ajax 返回 html 现在不流行转而流行只返回数据了
    fuxiaohei
        33
    fuxiaohei  
       2017-02-26 11:21:38 +08:00
    这是 pjax ,最有名的使用者是 Github 。
    你在项目切换代码文件目录,就可以看到 pjax 的 xhr
    ppwangs
        34
    ppwangs  
       2017-02-26 15:47:06 +08:00
    pjax
    wenzichel
        35
    wenzichel  
       2017-02-27 09:39:24 +08:00
    直接返回 json 格式的数据,有利于多环境的使用,比如多个页面中只是数据一样,但是展示的方式不一样;还有就是接口维护方便,当字段发生改变时,前端页面的展示尽量不受到影响
    tofishes
        36
    tofishes  
       2017-02-27 12:50:33 +08:00
    ajax 返回 html 没什么问题,简单易用。至于什么时候返回 json ,你到时候自然会明白。选择适合你当前的用法就行了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3356 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 84ms UTC 04:49 PVG 12:49 LAX 20:49 JFK 23:49
    Do have faith in what you're doing.
    ubao msn 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