除了合理的后端错误处理外,设法用 AngularJS 重写了我的项目。
我只希望有一种通用的方法来捕获 Ajax 错误响应并相应地修改范围。
在 JQuery 中,我会执行以下操作:
- 在 Ajax 设置上设置一个元素(我们称之为 ajaxRoot)
我会确保后端在标题“显示消息”上发送错误,其中每个键与 ajaxRoot 下的元素名称匹配。例如
<div id="myAjaxSection"> <span class="view-port"> <input name="username"/> </span> </div> $.ajax({ ajaxRoot : $("#myAjaxSection"), ... });
用于
ajaxError
捕获所有 ajax 错误,看起来像if ( ajaxSettings.ajaxRoot && jqXHR.getResponseHeader("display-messages")){ var msgs = JSON.parse( jqXHR.getResponseHeader("display-message")); var $ajaxRoot = ajaxSettings.ajaxRoot; var k; for ( k in msgs ){ $ajaxRoot.find("[name=" + k + "]" ).closest(".view-port" ).addClass("error").popover({content: msgs[k]}); } }
假设我决定的约定,这将很容易处理任何页面上的所有错误。
现在我正在尝试使用 AngularJS 达到类似的效果。这是我到目前为止尝试过的
- http拦截器-但我无法访问范围。
- http 拦截器 + 发布/订阅事件 - 需要在每个控制器中重复代码。
- $http 调用上的错误处理程序 - 再次导致代码重复。
目前我被卡住了。我需要有关如何进行的指导?
编辑
我讨厌回答我自己的问题。
我现在有一个丑陋但合理的解决方案。将不胜感激有关此主题的更多答案。