【发布时间】:2015-03-03 05:13:42
【问题描述】:
客户端向 Rails 控制器心跳发出请求。心跳响应成功 200OK 或错误(未经授权)401。客户端每 500 毫秒发送一次此请求。
我想在 ajax 请求期间出现错误 401 时显示引导模式。所以在里面我放了那个 modal('show') 但是引导模式被触发了。
这是在文档加载时添加引导模式的代码。
$(function(){
$('body').append('<div id="confirm-logout-modal" class="modal hide fade" style="display: none;"> \
<div class="modal-header"> \
<h3 class="modal-title">Logout</h3> \
</div> \
<div class="modal-body"> \
<p> \
<span class="modal-main-message">You have been logged out</span> \
</p> \
</div> \
<div class="modal-footer"> \
<button id="btn-confirm" class="btn btn-success">Okay</button> \
</div> \
</div> \
');
$('#btn-confirm').click(function(){
$('#confirm-logout-modal').modal('hide');
window.location.reload();
});
});
这是在 ajax 错误回调中显示引导程序的代码
function check_heartbeat(){
$.ajax({
type: 'GET',
url: '/heartbeat',
success: function(data){
void(0);
},
error: function(response) {
if(response.status == 401){
clearInterval(heartbeat_id);
$('#confirm-logout-modal').modal('show');;
}
}
});
};
但这里的问题是它在从 ajax 错误回调调用时不显示模式弹出窗口。
我检查了谷歌浏览器没有错误。我也尝试调用 modal('show') 控制台,它确实显示了弹出窗口。我还尝试在文档加载时调用弹出窗口,然后模态弹出窗口也可以工作。
但只有当从 ajax 错误回调中调用时才会出现问题
更多发现:
1. 只有在生产模式下启动rails server时才会出现此问题
2. 只显示背景,不显示模态。单击背景上的任意位置后会显示模态。那时背景会关闭并显示模式弹出窗口。
3.这个问题只发生在safari上。
4. 这个问题只有在 safari tab 失焦时才会出现。如果我在同一个选项卡上并显示弹出窗口。但是如果我在让我们说第二个选项卡并且弹出窗口显示在第一个选项卡上。如果我切换回第一个标签,那么我只会看到背景。
这是 JSFiddle 代码
http://jsfiddle.net/5y7725v5/
运行代码并快速切换到其他选项卡。等待一段时间,然后切换回原始选项卡。看不到弹出窗口。现在运行代码并留在同一个选项卡上!弹出窗口显示
【问题讨论】:
-
您的错误回调的模式显示中有额外的
;。 -
是的,有。但这不会造成任何问题。
-
您的代码显然比您展示的要多。如果您发布 jsfiddle 或 plunker 来证明您的确切问题,我们将更容易为您提供帮助。去掉所有与您的确切问题无关的代码,使其在可重现的环境中失败,其他人可以帮助您调试代码。
-
我又发现了一件事。这个东西只有在 Rails 服务器以生产模式启动时才起作用(这里它缩小了所有的 js 代码)。在开发模式下它可以正常工作
-
其实这就是相关的代码。其他代码与应用程序的其他部分相关,无关紧要。
标签: javascript jquery ruby-on-rails ajax twitter-bootstrap