开发者社区> 问答> 正文

JFinal ajax 只能返回json的bug? 400 报错

JFinal ajax 只能返回json的bug? 400 报错

@JFinal 你好,

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

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

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


展开
收起
爱吃鱼的程序员 2020-06-04 13:15:23 615 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

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

          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######

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

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

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

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

    ######表示对beetl误会表示歉意!
    2020-06-04 14:24:05
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载