2012-10-31 3 views
3

iPhone과 같은 휴대 기기 및 데스크톱에서 실행되도록 설계된 웹 응용 프로그램이 있습니다. 최근 iOS 기기로 iOS6으로 업그레이드 할 때까지 iOS 기기에서 항상 정상적으로 작동합니다. 이제 우리는 iOS6의 Safari에만 해당되는 이상한 버그를보고 있습니다. iOS5 Safari에서는 여전히 정상적으로 작동하며 iOS6 Chrome에서는 정상적으로 작동합니다.iOS6 Safari JavaScript Ajax 폴링 버그?

버그는 서버 업데이트를 쿼리하는 방식과 관련이 있습니다. 5 초마다 발생하도록 Ajax 호출을 설정했습니다. Ajax 호출은 새 데이터를 반환하고 클라이언트 측은 새 데이터로 업데이트합니다. Safari/iOS6에서 지금보고있는 동작은 이전 호출이 반환 될 때 호출이 즉시 발생하고 결과가 항상 새로 고침되고 다시 칠해져 사용할 수 없게 만드는 페이지라는 것입니다. 작은 회 전자는 항상 잘 보이며 페이지 로딩이 멈추지 않는 것처럼 보입니다.

$(document).ready(function(){ 

    getUpdates(); 
    var refresh = 5000; 
    setInterval("getUpdates()", refresh); 

}); 

function getUpdates() { 
    $.post("status.jsp", {}, function(status){ 
     // do client-side rendering here 
    }, "json"); 
} 

사파리의 버그는 이것이다 :

여기를 설정하는 클라이언트 측 자바 스크립트 코드는? 내 코드의 버그? 해결 방법이 있습니까? 내 웹 앱은 현재 아이폰에서는 쓸모가 없다. 좋은 상황이 아니다. 감사합니다.

+1

ios6 safari caches ajax results. 이 [질문] 참조하십시오 (http://stackoverflow.com/questions/12506897/is-safari-on-ios-6-caching-ajax-results) –

+1

** fyi ** 당신은'setInterval ("getUpdates() ", 새로 고침)''setInterval (getUpdates, refresh);'를 사용하여 'eval'이 사용되지 않도록합니다. – andlrc

+0

NuclearGhost, 그게 고정, 당신은 대답에 넣어 수 있으며 그것을 받아 들일 수있는 몇 가지 의견을 제공합니까? – bluedevil2k

답변

2

두 센트는 setInterval을 사용하지 말고 setTimeout을 사용하여 getUpdates를 재귀 적으로 호출해야합니다. 이렇게하면 서버가 응답하는 데 오랜 시간이 걸리거나 사용자의 처리가 바쁠 때 요청을 서로 겹치지 않고 5 초 간격으로 분리 할 수 ​​있습니다.

$(document).ready(function(){ 
    getUpdates(); 
}); 

function getUpdates() { 
    $.post("status.jsp", {}, function(status){ 

     // do client-side rendering here 

     setTimeout(getUpdates, 5000); 
    }, "json"); 
} 
+0

이 정보가 도움이 되셨습니까? ios6 이상의 사파리에서 항상 회전 문제가 발생하며이 답변이 모바일 앱에서 해결되었는지 궁금합니다. – Beckyjoon