gpt4 book ai didi

jquery - IE 8 在使用 jQuery BBQ 重新加载页面时显示原始 ajax 响应

转载 作者:行者123 更新时间:2023-12-03 23:00:58 25 4
gpt4 key购买 nike

我在分页链接上使用 Ben Almans 的 jQuery BBQ 和 jQuery hashchange 插件。两者在 Opera 和 Firefox 中都能按预期工作,但在 IE 8 中却不能(很惊讶,是吧?)。 IE 也可以很好地与 ajax、后退按钮和 hashchange 配合使用,但当我单击重新加载按钮时失败并显示 raw 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;
}
}

模板(Rails View ):

<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 View ):

$('#products').html('<%= escape_javascript(render "products_list") %>').css('opacity', '1');

UPD: IE 在刷新时不会发送请求类型 header (或者 Rails 无法确定它)。所以 Rails 生成 JS View 而不是 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

关于jquery - IE 8 在使用 jQuery BBQ 重新加载页面时显示原始 ajax 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6194895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com