请教:ajax 请求后台数据时 render返回html跳转不可用 如何解决

前端页面使用的是html 不是jsp
需求:html通过ajax提交请求到后台 业务逻辑如果出错返回错误信息和提示 如果正常跳转页面;
问题:但是发现ajax 设置了返回类型 json  返回的是html不是json 就走了error函数

1、除了将要跳转的页面返回给前台由前台window.loacation.href跳转 还有其他方法吗?   因为想用render来渲染视图   
2、如果用form表单请求 不方便返回错误信息 并且会刷新页面  


请问有没有什么其它办法?

评论区

JFinal

2019-02-18 11:26

后端使用 renderToString 配合 renderJson 来使用, 而不是直接使用 render,大致如下:
String html = renderToString("xxx.html");
Ret ret = Ret.ok("html", html);
renderJson(ret);

前端 ajax 大至如下:
success : function(ret) {
alert(ret.state);
alert(ret.html);
}

其中 ret.state 是 Ret.ok 设置的一个状态,有两种状态:"ok" 与 "fail"
这两个状态可以这么来判断:
if (ret.state == "ok")
if (ret.state == "fail")

还可以在后台传入更多数据,例如:
Ret ret = Ret.ok("html", html);
ret.set("key1", 123).set("key2", 456);
renderJson(ret);

在前台通过 ret.key1、ret.key2 获取

王子鹏

2019-02-18 15:15

@JFinal alert(ret.html); html拿到了 还请明示怎么替换当前页面做到跳转的效果? 还是说如果是跳转效果只能用题目里说的那两种方法?

JFinal

2019-02-18 15:57

@王子鹏 跳转在本质上与后端的 render 无关,既然你是 ajax 请求,在得到后端的数据以后,只能用 javascript 代码实现跳转

跳转的目标 url,可以是后端传过来的,例如:
Ret ret = Ret.ok("url", "/users");
renderJson(ret);

success : function(ret) {
if (ret.state == "ok") {
window.loacation.href = ret.url;
}
}

王子鹏

2019-02-20 13:09

@JFinal 我明白了 非常感谢!

热门反馈

扫码入社