IE7中的jQuery .ajax方法& IE6无法运行但在Firefox中运行良好

时间:2010-02-23 17:01:27

标签: jquery ajax internet-explorer-7 internet-explorer-6

这与我之前的帖子有关:

jQuery .load Method causing page refresh 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($('<div class="benefitWrap">' + $benefitWrap + '</div>'));

        });

       }

    });

    event.preventDefault(); 

});

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

我出错的任何想法?

5 个答案:

答案 0 :(得分:20)

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

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

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

答案 1 :(得分:6)

我意外地解决了问题所在。

此变量中引用的链接:

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摆脱它现在有效:)

答案 2 :(得分:2)

eventreserved word in some versions of IE。尝试将您正在捕获的参数从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($('<div class="benefitWrap">' + $benefitWrap + '</div>'));

    });

   }

});

<强>更新

经过进一步审核,我认为您的问题是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());
}

答案 3 :(得分:1)

网址中的哈希是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

答案 4 :(得分:0)

问题似乎就在这里:

success: function(data){    
            alert(data);
            $(data).find('.benefitWrap').each(function(){
                alert(data);
                var $benefitWrap = $(this).html();
                $('.benefitWrap').replaceWith($('<div class="benefitWrap">' + $benefitWrap + '</div>'));                
        });

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