IE7和IE6中的jQuery .ajax方法无法正常工作,但在Firefox中工作正常

这与我以前的post有关:

jQuery .load方法导致页面刷新AJAX

我更改了我的implmentation以使用.ajax方法而不是.load,它在Firefox中工作正常但在IE7或IE6中没有:

$('ul#coverTabs > li > a').live('click', function(event) { // Find href of current tab var $tabValue = $(this).attr('href'); $.ajax({ type: "GET", cache: false, dataType: "html", url: $(this).attr('href'), success: function(data){ $(data).find('.benefitWrap').each(function(){ var $benefitWrap = $(this).html(); $('.benefitWrap').replaceWith($('
' + $benefitWrap + '
')); }); } }); event.preventDefault(); });

这让我很伤心,因为它已经花了很长时间才能实现这一目标。

我出错的任何想法?

只是一个快速的。 我曾经遇到过一些令人沮丧的问题,过去使用IE6 / 7默默地失败了。 几乎在所有情况下,在我的代码中的某个地方(不一定在有问题的ajax调用中)我在这样的参数之后有一个额外的逗号:

 $.ajax({ type: "GET", cache: false, dataType: "html", url: $(this).attr('href'), success: function(){}, )} 

我会通过jslint运行脚本,看看在进行适当的调试之前语法中是否有任何有趣的导致此问题。

我意外地弄清楚了问题是什么。

此变量中引用的链接:

 var $tabValue = $(this).attr('href'); 

最后有一个哈希值,如下所示:

 https://bupacouk.bwa.local.internal.bupa.co.uk/cash-plan-quote/quoteAction.do?getBenefitLevelDetails=getBenefitLevelDetails&productPolicyId=7850#a1 

这导致AJAX在IE的版本中失败。

使用以下代码:

 var $withoutHash = $tabValue.substr(0,$tabValue.indexOf('#')); 

Getrs摆脱它现在有效:)

在某些版本的IE中, event是一个保留字 。 尝试将您从event捕获的参数更改为确保避免碰撞的内容,例如evt ,例如:

 $('ul#coverTabs > li > a').live('click', function(evt) { evt.preventDefault(); // Find href of current tab var $tabValue = $(this).attr('href'); $.ajax({ type: "GET", cache: false, dataType: "html", url: $(this).attr('href'), success: function(data){ $(data).find('.benefitWrap').each(function(){ var $benefitWrap = $(this).html(); $('.benefitWrap').replaceWith($('
' + $benefitWrap + '
')); }); } });

更新

经过进一步审核,我相信你的问题是find() 。 在这种情况下,您应该使用filter()

 success: function(data) { $(data).filter('.benefitWrap').each(function() { // This should accomplish the same thing a bit more cleanly. $('.benefitWrap').html(this.innerHTML); }); } 

这可以进一步重构为:

 success: function(data) { $('.benefitWrap').html($(data).filter('.benefitWrap').html()); } 

url中的哈希是IE 6和7的问题,xhr.status eror 500.解决得很好:

 function removeHash(url) { return url.replace(/#(.*)$/, ""); } $.get(removeHash(this.href),...) 

请参阅: http : //forum.jquery.com/topic/ticket-3808-ajax-load-fails-404-if-there-is-a-hash-in-the-url

好吧问题似乎在这里:

 success: function(data){ alert(data); $(data).find('.benefitWrap').each(function(){ alert(data); var $benefitWrap = $(this).html(); $('.benefitWrap').replaceWith($('
' + $benefitWrap + '
')); });

第二个警报从未出现,但第一个警报出现。 我讨厌IE!