我正在尝试在叠加层中显示一个表单。表单通过ajax加载。这一切都适用于firefox 3.x。
但是在Safari 5.0(5533.16)上,叠加显示但不会发出ajax请求,而是发出html请求。
以下是我在js中配置它然后在document.ready上调用ModalPostForm.init();
pastie - http://pastie.org/1196064
var ModalPostForm = {
init: function(){
$("a[rel='#post_overlay']").each(function(){
//alert($(this).attr('href'));
$(this).overlay({
closeOnClick: false,
target: '#post_overlay',
fixed: false,
onBeforeLoad: function() {
// grab wrapper element inside content
var wrap = this.getOverlay().find(".contentWrap");
// load the page specified in the trigger
wrap.load(this.getTrigger().attr("href"));
},
onLoad: function() {
setTimeout("configurePostForm(200, 1000, 150)", 500);
},
onClose: function() {
$('.contentWrap').empty();
}
});
});
},
close: function(){
$("a[rel='#post_overlay']").each(function(){
var ol = $(this).data("overlay");
if(ol.isOpened()){
ol.close();
}
});
}
};
这是我的HTML
<div id="post_overlay" class="new-post-overlay span-12" style="top: 54.3px; left: 429px; position: absolute; display: none;"><a class="close"></a>
<div style="display: none;" id="form_loading" class="">
<div class="loading-inner-center"></div>
</div>
<div id="" class="contentWrap"></div>
</div>
为什么要发出html请求?
由于
如果我在控制器操作中删除了rails respond_to块中的format.html块,则会消失。
虽然问题仍然是为什么它发送一个html请求或者为什么rails认为它是一个html请求。对于那些确实无法执行js的浏览器,我宁愿不删除该块。
respond_to do |format|
# format.html # new.html.erb
format.js {
}
# format.xml { render :xml => @post }
end
# format.html {
# if @edit
# #
# setup_post_items(true)
# else
# flash[:error] = 'Sorry no further edits, Post has already been approved.'
# redirect_back_or_default root_url
# end
# }
format.js {
if !@edit
flash[:error] = 'Sorry no further edits, Post has already been approved.'
end
}
答案 0 :(得分:2)
我还注意到format.html块有时会捕获js请求。我用过两种方法来解决这个问题(以下任何一种方法都应该解决它,你不需要同时解决这两个问题):
a)在你的javascript中,将“.js”附加到你的目标href。例如:
if ( ! /\.js/.test($this.attr('href')) ) {
$this.attr('href', function(index, href) {
return href.replace(/([^\?]+)(.*)/, '$1.js$2');
});
}
b)在您的控制器中,将format.js块放在 format.html块之前,以便javascript请求与js块匹配,然后才能匹配html块。