如何解决IE 8在使用jQuery BBQ重新加载页面时显示原始ajax响应
| 我在分页链接上使用了Ben Almans的jQuery BBQ和jQuery hashchange插件。两者都可以在Opera和Firefox中正常工作,但在IE 8中却无法正常工作(惊讶吗?)。 IE在ajax,后退按钮和hashchange上也能很好地工作,但是当我单击重新加载按钮并显示原始ajax响应而不是在先前加载的页面中运行它时失败。 因此,这是我的丑陋代码以及有关我试图在分页中实现的功能的一些说明: 1)搜索引擎友好的链接(服务器响应html或js,具体取决于客户端的javascript可用性)。 2)启用JS时可动态更改的url(使用\'#\'符号)。 3)历史记录和后退按钮支持。 4)最小化双重请求(如果在html页面中加载了相同的内容,则不要发出ajax请求)。 JS:$(function ($) {
if (ajax_init) {
$(\'.pagination a\').live(\"click\",function () {
$.bbq.pushState({page: $.deparam.querystring($(this).attr(\'href\')).page});
return false;
});
$(window).bind(\"hashchange\",function(e) {
var anchor = $.deparam.fragment().page;
var query = $.deparam.querystring().page;
if (ajax_load(anchor,query)) {
$(ajax_div).css(\'opacity\',\'0.4\');
$(ajax_div + \'-processing\').removeClass(\'hidden\');
$.ajax({
type: \'GET\',url: $.param.querystring(\'\',{page: anchor}),dataType: \'script\',cache: false
});
}
});
$(window).trigger(\'hashchange\');
}
});
function ajax_load(anchor,query) {
if ((anchor && anchor !== query && !(!query && anchor == 1)) || $(\'#noscript\').length < 1) {
return true;
}
else {
return false;
}
}
模板(“滚动”视图):
<div id=\"products-container\" >
<div id=\"products-processing\" class=\"hidden\">
<%= image_tag \"spinner.gif\" %>
</div>
<div id=\"products\">
<div id=\"noscript\">
<%= render \"products_list.erb\" %>
</div>
<script type=\"text/javascript\">
var ajax_init = true;
var ajax_div = \'#products\';
var anchor = $.deparam.fragment().page;
var query = $.deparam.querystring().page;
if (!ajax_load(anchor,query)) {
url = anchor ? anchor : (query ? query : 1);
$.bbq.pushState({page: url});
}
else {
$(\'#noscript\').hide();
$(\'#products-processing\').removeClass(\'hidden\');
}
</script>
</div>
<div id=\"products-min-height\"></div>
</div>
AJAX模板(Rails js视图):
$(\'#products\').html(\'<%= escape_javascript(render \"products_list\") %>\').css(\'opacity\',\'1\');
UPD:刷新时IE不会发送请求类型标头(或Rails无法确定它)。因此,Rails生成JS视图而不是HTML。解决者:
respond_to do |format|
request.format.js? ? (format.js {render :index}) : (format.html {render :index})
end
有更好的解决方案吗?
解决方法
IE似乎要求刷新时输入\“ * / * \”,Rails似乎认为javascript比html更好。因为刷新仅应针对html进行,所以请告诉Rails \“ * / * \”意味着html可以解决此问题:
before_filter :set_request_type
...
protected
def set_request_type
request.format = :html if request.format == \"*/*\"
end
, 我对IE8也有同样的问题。我的控制器正在提供JS和HTML响应。
对我来说,确保在代码中首先注明html格式块已解决了问题:
这不起作用,因为Rails会响应js模板:
respond_to do |format|
format.js
format.html
end
但是,这很好用:
respond_to do |format|
format.html
format.js
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。