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

2013-06-06 20:50:46 +08:00
 Rabbit52
写两个方法还是同一个方法在方法内部判断?

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

求交流~
3342 次点击
所在节点    程序员
9 条回复
clww
2013-06-06 21:05:18 +08:00
两个方法,表单的那个从表单里取数据,ajax的从xhr里取数据,数据的validate和进一步处理都调同一个方法,应该不会有太多重复,结构上也更清晰一些吧
leojoy710
2013-06-06 21:06:07 +08:00
倾向于区别是否ajax返回不同东西...
yakczh
2013-06-06 21:44:17 +08:00
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
2013-06-06 22:48:23 +08:00
@leojoy710 大多数情况下返回的应该是不同的东西
Rabbit52
2013-06-06 22:49:43 +08:00
@clww 嗯,尽量把这些共用代码分离出来也是一个办法
Rabbit52
2013-06-06 22:51:51 +08:00
@yakczh 传统的方式提交,action里面可能验证过后就直接返回一个redirect了,不需要输出视图什么的,这样写感觉也不能兼顾所有~
yimity
2013-06-07 10:24:48 +08:00
ajax 提交的时候设定一个自定义的 header 就好了。
cutehalo
2013-06-07 10:28:10 +08:00
提交请求的时候加上一个参数 来判断是不是提交的ajax请求就行
dulao5
2013-06-07 10:40:07 +08:00
从REST角度看,
表单提交时 content-type是urlencode类型;
AJAX提交时content-type是application/json之类的类型;

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

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

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

理论上应该依赖accept-type 来决定Response的编码, 实际项目没必要追求到这个地步。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/71519

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX