2010-02-23 6 views
3

이 내 이전 게시물에 관련된에서 잘 작동하지 : 내가 대신 .load의 아약스 메서드를 사용하여 내 implmentation을 변경 의 jQuery 아약스 방법이 작동하지만, 파이어 폭스

jQuery .load Method causing page refresh AJAX

과 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(); 

}); 

이렇게까지 오래 걸렸으므로 이로 인해 나를 죽이는 경우가 있습니다.

내가 잘못 가고있는 아이디어가 있습니까?

답변

6

실수로 문제가 해결되었습니다. 이 변수에서 참조

링크 :

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

은과 같이 끝에 해시 값을했다가 :

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

이 IE의 보테 버전에서 이상 떨어 AJAX 원인이됩니다. 그것을 제거

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

Getrs을하고 지금 작동 :) URL에

20

그냥 빨리. IE6/7에서 자동으로 실패한 jQuery에 대한 몇 가지 실망한 문제가있었습니다. 아무것도가 있는지 나는 jslint을 통해 스크립트를 실행하는 것입니다

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

: 대부분의 경우, 내 코드에서 어딘가에는 (반드시 문제의 아약스 호출)이 같은 인수 후 여분의 쉼표를했습니다 적절한 디버깅을하기 전에이 문제를 일으키는 구문이 재미 있습니다.

+0

네, IE6는 마지막 매개 변수 뒤에 콤마이 하나 – choise

+0

LARGE 덕분에이 때, 자바 스크립트 오류가 발생한다는 것을 알고있다 - 나는 천천히 미쳐 가고 있었다 . 후행 쉼표를 제거하면 저를 저주받은 IE6에서 실행합니다 ... – SAL

+4

+1 for jslint : –

2

eventreserved word in some versions of IE입니다. 매개 변수는 evt 같은 충돌을 피하기 위해 반드시 뭔가 event에서 캡처하고, 예컨대 : 추가 검토시

$('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()); 
} 
+0

@ Dave. 고마워요.하지만 어느 것도 작동하지 않는 것 같습니다. 첫 번째는 FFOX, IR7 또는 IE6의 서버에서 아무것도 반환하지 않고 두 번째는 'benefitsWrap'div의 모든 데이터를 지 웁니다. 어쨌든 건배. – RyanP13

+0

약간 무례하게 생각해서 죄송합니다. 정말 도움을 주셔서 감사합니다. 나는 그것이 단지 IE 버크/crpaness 일 것이라고 확신한다. 아직 하얀 깃발을 흔들리지 않을거야. – RyanP13

+0

두 번째 코드가 루프를 마침내 처음 실행하기 때문에 div 만 보았습니다. 정적 데이터를 사용하여 서버에서 반환 된 것으로 흉내 냈습니다.'filter'는 검색에서 설명 된 것처럼'find'가 0 개의 항목을 찾지 못했고 (루프를 입력하지 않았을 때) 작동했습니다. 대답). 당신이 생각하는 HTML이 실제로 서버에서 다시 돌아오고 있다고 확신합니까? 반환되는 마크 업에 .benefitWrap div가 없거나 비어있는 것 같습니다. –

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가 싫어!

+0

그래서 데이터에는 무엇이 있습니까? $ (data) .find ('.wrapWrap')의 길이는 얼마입니까? – janmoesen

+0

| 데이터 | 서버의 색인 페이지에서 HTML을 포함해야합니다. 이것은 URL 변수를 받아들이고, 데이터베이스를 쿼리하고, AJAX에 의해 호출 된 HTML 테이블을 업데이트하고이를 호출 한 smae 페이지에 결과를 리턴하는 JSP 페이지입니다. – RyanP13

+0

내 답변에 대한 업데이트를 참조하십시오. –