2010-07-26 3 views
6

Google 크롬 또는 Android (2.1) 웹 브라우저에 문제가 있습니다.Google 크롬으로 로딩 표시기

내 webapp는 각 페이지 이동과 함께 restservices를 호출합니다. 이 작업에는 약간의 시간이 걸리고 사용자에게 약간의 "작업 중 ..."팝업과 같은 피드백이 필요합니다. restservices는 sync ajax 요청으로 호출됩니다. 다음은 예입니다.

 
$.ajax({ 
    url: some URI, 
    async: false, 
    beforeSend: function() { 
     showIndicatorDialog(); 
    }, 
    complete: function() { 
     hideIndicatorDialog(); 
    }, 
    success: function(response) { 
     do something after success; 
    }, 
    error: function(response) { 
     do something after error; 
    }, 
    type: 'GET' 
}); 

FF와 Opera에서 훌륭하게 작동합니다! 하지만 내 안드로이드 장치와 크롬 oder에 내 webapp를 방문하면 로딩 표시 doesnt가 ​​나타납니다! Google 브라우저가 동기화 요청으로 작동하지 않는 것 같습니다.

나는 이것을 작동 시키거나 크롬에서 로딩 인디케이터를 얻기위한 다른 해결책을 아는 사람이 있습니까 ??

답변

8

해결 방법은 동기 요청을 사용하지 않는 것입니다. 일반적으로 동기 요청은 이 결코이어야합니다. 왜냐하면 페이지에서 다른 브라우저 (또는 전체 브라우저 UI)의 실행을 차단하는 경향이 있기 때문입니다.

+0

나는 downvote에 대한 이유를 듣고 싶습니다. –

+0

네, 알았어요. 하지만 그것은 현재 아키텍처이며, 가까운 장래에 변경할 수 없습니다. :/ – bedit

+0

동기식 요청을 "절대로"사용해서는 안된다는 말은 대담한 성명입니다. "그들은 물건을 막는 경향이 있습니다"보다 훨씬 더 나은 설명이 필요합니다. 그들은 무엇을 차단합니까? 앱의 모든 항목이 비동기식 인 경우 사용자가 위치를 북마크하는 방법은 무엇입니까? –

3

로딩 표시기가 Google 크롬 (데스크톱) 또는 Android 용 Android 모바일 Chrome 브라우저에 표시되지 않는다고 말하고 있습니까? 최신 버전의 jQuery를 사용하고 있다면 모든 데스크탑 브라우저에서 작동해야합니다. 모바일 브라우저는 완전히 다른 인터페이스 디자인으로 잘 지원되지 않으며, 풀 브라우저가 아니기 때문에 많은 사람들이 JS 기능을 완벽하게 지원하지 않습니다.

즉, Chrome Lite의 jQuery에 대해 전혀 듣지 못했습니다. — Android 플랫폼에 대한 가장 인상적인 점 중 하나는 모바일 플랫폼에 완벽한 기능의 브라우저를 포함한다는 것입니다. 하지만 모바일 버전의 jQuery가 사용 가능하거나 작동하고 있다고 생각합니다. 그래서 다른 모든 것이 실패한다면, 당신은 그것을 시도 할 수 있습니다. 모바일 브라우저에서 자바 스크립트/jQuery를 지원의 개요에 대한

가이 Google 그룹 게시물을 참조 : http://groups.google.com/group/jquery-dev/msg/262fa7d9f3cbe96e

편집 : 크롬의 UI 당신이 동기 요청을 수행하는 동안 잠글 것 같다 않지만, 나는 응답을 캐시에서 브라우저를 방지하기 위해 POST 요청을 사용

function callAjax() { 
    showIndicatorDialog(); 
    setTimeout("testAjax()",100); 
} 
function testAjax() { 
    foo = $.ajax({ 
     url: "index4.htm", 
     global: false, 
     type: "POST", 
     data: { 
      id: 3 
     }, 
     dataType: "html", 
     async:false, 
     success: function(msg){ 
      $('#response').text(msg); 
     }, 
     complete: hideIndicatorDialog 
    }).responseText; 
} 

, B : 나는 단순히 XHR을 로딩 표시기를 보여주고 수행 사이에 약간의 지연을 넣어이 과거를 얻을 수 있었다 이것은 get 요청과 똑같이 잘 작동해야합니다. Android 휴대 전화가 없어도 테스트 할 수 있지만 Google 크롬에서는 정상적으로 작동합니다.

+0

예, 표시기가 Google 크롬 데스크톱 및 Android 기기에 표시되지 않습니다. jQuery 버전 1.4.2를 사용합니다. 아마도 jQTouch로 놀 수도 있습니다 ... – bedit

+0

@ 벤자민 : 로딩 표시기를 보여주는 것과 동기 XHR을 시작하는 사이에 지연을가하십시오. –

+0

안녕하세요, 그것은 시간 제한과 함께 작동합니다! 당신의 위대한 노력에 감사드립니다 !! 먼저 15 가지 평판이 필요하기 때문에 투표를 할 수 없습니다! :/ – bedit