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

网站如何设计程序使同样的表单兼顾ajax提交方式?

  •  
  •   Rabbit52 ·
    HugoPresents · 2013-06-06 20:50:46 +08:00 · 3324 次点击
    这是一个创建于 3948 天前的主题,其中的信息可能已经有所发展或是发生改变。
    写两个方法还是同一个方法在方法内部判断?

    用前者的话感觉代码多少有点重复
    用后者的话因为ajax和刷新提交可能的后续操作会有不同,返回的数据可能也不同,代码显得又不优雅

    求交流~
    9 条回复    1970-01-01 08:00:00 +08:00
    clww
        1
    clww  
       2013-06-06 21:05:18 +08:00   ❤️ 1
    两个方法,表单的那个从表单里取数据,ajax的从xhr里取数据,数据的validate和进一步处理都调同一个方法,应该不会有太多重复,结构上也更清晰一些吧
    leojoy710
        2
    leojoy710  
       2013-06-06 21:06:07 +08:00   ❤️ 1
    倾向于区别是否ajax返回不同东西...
    yakczh
        3
    yakczh  
       2013-06-06 21:44:17 +08:00   ❤️ 1
    action 里面的view分为两种,一个是带模板的view,一种是jsonview ,如果在请求头里面检测到xhr,就启用,jsonView,如果action的view有指定view类型,就用指定类型的view方式,输出

    if( $config['viewType']){

    $viewType=$config['viewType'];
    }else {
    if( xrh){
    $viewType=jsonView;
    }else {
    $viewType=TplView;
    }

    }
    Rabbit52
        4
    Rabbit52  
    OP
       2013-06-06 22:48:23 +08:00
    @leojoy710 大多数情况下返回的应该是不同的东西
    Rabbit52
        5
    Rabbit52  
    OP
       2013-06-06 22:49:43 +08:00
    @clww 嗯,尽量把这些共用代码分离出来也是一个办法
    Rabbit52
        6
    Rabbit52  
    OP
       2013-06-06 22:51:51 +08:00
    @yakczh 传统的方式提交,action里面可能验证过后就直接返回一个redirect了,不需要输出视图什么的,这样写感觉也不能兼顾所有~
    yimity
        7
    yimity  
       2013-06-07 10:24:48 +08:00
    ajax 提交的时候设定一个自定义的 header 就好了。
    cutehalo
        8
    cutehalo  
       2013-06-07 10:28:10 +08:00
    提交请求的时候加上一个参数 来判断是不是提交的ajax请求就行
    dulao5
        9
    dulao5  
       2013-06-07 10:40:07 +08:00
    从REST角度看,
    表单提交时 content-type是urlencode类型;
    AJAX提交时content-type是application/json之类的类型;

    但操作的是同一个资源,提交的内容也是同样的东西(只是编码形式不同)。

    所以,应该先将不同编码形式的内容,加工成一种统一形式。之后处理就是一样的了。

    最后,Response的逻辑对象也是一致的,只是编码形式不同(html或json)。

    理论上应该依赖accept-type 来决定Response的编码, 实际项目没必要追求到这个地步。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3605 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:28 · PVG 18:28 · LAX 03:28 · JFK 06:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.