Rails AJAX反馈,尤其是在出现错误时
Rails AJAX Feedback, especially on error
我想改进我的应用程序中的AJAX反馈(在我用modals等发布远程表单之后)。
我已经有一些不错的反馈显示加载动画
$(document).ajaxStart(function(){
$('.loading-feedback').show()
})
$(document).ajaxStop(function(){
$('.loading-feedback').hide()
})
但我意识到这还不够:当我的AJAX请求触发Completed 500 Internal Server Error in 1985ms
。。。好吧,用户什么都没发生。
例如,我想在我的前端显示一条提醒信息。
我已经有一些代码可以显示我存储在AJAX响应中的一些flash消息,我想为此重用这些消息(例如,通过显示oops, your AJAX request triggered a #{err_code} #{err_description}. Please tell the devs :D
我有以下代码,它成功地显示AJAX请求后的引导程序闪烁(闪烁的内容/类型在我的控制器中定义)
application_controller.rb
after_filter :ajax_flash
def ajax_flash
return unless request.xhr?
if type = priority_flash
response.headers['X-Message'] = flash[type]
response.headers['X-Message-Type'] = type.to_s
flash.discard # don't want the flash to appear when you reload page
end
end
相关javascript
$(document).ajaxComplete(function(e, request, opts) {
fireFlash(request.getResponseHeader('X-Message'), request.getResponseHeader('X-Message-Type'));
# Where fireFlash is a function that displays a bootstrap alert
});
但现在,如果出现错误,我的控制器操作将返回。是否可以检测到这一点,例如填充一个闪光
flash[:fatal] = "oops, your AJAX request triggered a #{err_code} #{err_description}. Please tell the devs :D"
那会显示在我的前端吗?(注意,我不知道在哪里可以找到err_code和err_description)
您不需要使用Ajax来创建flash消息。
由于flash消息是非持久性的,并且在呈现时会从会话中删除,因此您可以通过修改文档来创建新的flash消息。
这是一个最小的闪存实现:
$(document).on('flash', function(e, key, message){
var $flash = $('<li class="alert flash js-created"></li>')
.addClass("alert-" + key)
.html(message);
$(this).find('.flashes').append($flash);
});
Turbolinks将清除闪烁以供使用,因为它取代了整个<body>
。
您可以使用ajaxError
而不是ajaxStop
来添加全局ajax故障处理程序。
var $doc = $(document);
$doc.ajaxError(function(event, jqxhr, settings, thrownError){
$doc.trigger('flash', ['error', jqxhr.status + thrownError]);
});
这样使用它。
$loader.fadeIn();
jqXHR = $.ajax({
url: "",
type: "POST",
data: {},
dataType: "json"
});
jqXHR.done(function( response ) {
});
jqXHR.fail(function( jqXHR, textStatus ) {
console.log( "Request failed: " + textStatus );
});
jqXHR.always(function( jqXHR, textStatus ) {
$loader.fadeOut();
});
相关文章:
- 如何使gullow任务跨平台.尤其是吞咽贝壳
- jQuery结合了2个绑定函数(类型错误:a是未定义的)
- Jasmine测试工厂函数调用本地函数和另一个函数-获取错误:应该是间谍,但得到了function
- 培根.js Bus.plug: 未捕获 错误: 不是可观察的 : [对象对象]
- 未捕获的类型错误: .不是 JavaScript 中的函数
- 如何测试Greasemonkey脚本,尤其是在本地网页副本上
- 淘汰抛出消息:类型错误:
不是一个函数.什么意思 - Angular JS(尤其是 Angular Material Design)在 Sublime Text 3 上不能很
- XrayWrapper 错误(值是可调用的)在 Firefox 插件中覆盖原型方法时
- 未捕获错误:不是有效的 2D 阵列
- 无法打开 https,尤其是 phantomjs 中的 salesforce 网站
- 谷歌图表;未捕获错误:不是数组
- 在 JavaScript 中依赖全局本机对象是否安全,尤其是 Object 对象
- Mirth 连接错误:“..不是 XML 对象“时尝试从数组输出文本
- 更改浏览器选项卡会不期望触发焦点事件,尤其是在谷歌浏览器中
- 如何测试 Web 应用程序的客户端,尤其是商业产品的自动化测试
- Javascript - 错误..不是闭包中的函数
- 无法理解为什么代码给出错误:类型错误:0 是只读的
- 如何同步三.js和 HTML/SVG 坐标系(尤其是 y 轴)
- Rails AJAX反馈,尤其是在出现错误时