JFinal ajax 只能返回json的bug

一线码农 发布于 2015/01/08 23:38
阅读 1K+
收藏 3

@JFinal 你好,

最近使用JFinal1.9发现一个bug,只要是ajax 的请求,jFinal都会返回json,不能返回html这些。

我测试过,FreeMaker,Beetl,都有这样的问题。

说明下:项目是从其他框架转到JFinal上,UI没有任何变化,在其他框架上,没有出现这个问题。


加载中
0
teardream
teardream
ajax请求指定返回的datatype, controller中使用对应的render返回对应类型的数据,如string,json等……
车开源
车开源
那就奇怪了,我都用得好好的(之前用ajax请求却获取html,之定render后获得json,反之也一样吧)
一线码农
一线码农
回复 @车开源 : 无论指定RenderHtml,RenderText,JFinal都会返回Json,JFianl Controller中,做了判断,从新建了一个Render,我Debug过这块代码的。
车开源
车开源
要指定对应的render
0
teardream
teardream
对了你所谓的html可以按照string 理解。 不知道我的回答对不对你的问题…… 或者你的表述和我的理解有偏差
0
mi-la-king
mi-la-king
换浏览器试了吗?
一线码农
一线码农
肯定的,safair,chrome
0
JFinal
JFinal

      jfinal 的 render 方法返回什么类型的数据与请求无关,只与 render 实现类有关,例如,你前端请求是 ajax,而后端用的 renderHtml(String),那返回的 content type 就是  text/html。再例如,你前端请求是普通的http get,后端是 renderJson(...),那返回的 content type 就是 application/json。

     楼主出现的情况很可能是被拦截器干预过了,使用了别的 render 方法,跟踪一下 com.jfinal.core.ActionHandler.java 这个类,看一下最终到底用的是哪个 render,中途使用的 render 都不一定是最终的,例如拦截器在 ai.invoke() 以后可以再次 render,对于多次 render 调用,只有最后一次才有效

一线码农
一线码农
对,我跟了代码,拦截器在 ai.invoke() 中,从新创建了一个Render,这个Render默认返回Json
0
KILLERatBJ
KILLERatBJ

关于这个问题,我也遇到了。我用的是jfinal集成beetl,渲染的时候,render其实是有beetl提供 ,我想是beetl的问题,但其作者并不打算回答这个问题。

   顺便问一下,这个问题你找到解决办法了吗》?

一线码农
一线码农
我没有解决,还是用之前的Nutz,我跟了代码,发现JFinal 从新创建了一个Render,
0
KILLERatBJ
KILLERatBJ
您好,问题找到了。你在继承controller的时候选择

import com.jfinal.core.Controller;然后再试试。

0
KILLERatBJ
KILLERatBJ
表示对beetl误会表示歉意!
返回顶部
顶部