如何在Ajax请求中终止控制器动作,避免.js.erb文件渲染
解决Ajax请求中控制器
redirect_to后仍渲染.js.erb的问题 当处理Ajax请求时,单纯用redirect_to ... and return没法终止后续的模板渲染——原因是Ajax请求属于XMLHttpRequest,浏览器不会直接处理重定向响应,Rails会继续执行渲染流程。以下是几种直接终止请求、避免渲染.js.erb的方法:
直接返回空状态响应:用
head方法返回指定HTTP状态码,直接终止响应流程,不会触发模板渲染。示例代码:def your_action # 业务逻辑处理 head :no_content and return # 也可根据需求用其他状态码,比如 :ok、:unprocessable_entity end返回空内容响应:如果需要兼容旧版Rails,可通过
render返回空内容,同样能终止模板渲染:def your_action # 业务逻辑处理 render plain: '', status: :ok and return end若需实现跳转(前端处理):如果需求是Ajax请求后跳转页面,不要用
redirect_to,直接渲染JS代码让前端执行跳转即可,既终止原模板渲染,又达成跳转目的:def your_action # 业务逻辑处理 target_path = some_path render js: "window.location.href='#{target_path}'" and return end
内容的提问来源于stack exchange,提问作者b.herring
相关产品推荐
相关产品推荐

