2011-01-31 1 views
1

나는 내 사이트의 ajax-tivity (TM)를 단계적으로 향상시키고 있으며 최근에는 아주 기본적인 오류 처리를 추가했습니다. jquery .ajax() 메서드를 사용하여 호출하고 show_error_box (메시지) 함수를 사용하여 오류를 표시합니다. 서버 측 유효성 검사가 쉽도록 스크립트를 반환하여 모든 Ajax를 처리하고 있습니다. show_error_box에 대한 호출을 되돌립니다. 다른 오류의 경우 단순히 내가 잘 대부분의 문제 (연결, 시간 제한 등)이 거래하지만이 상황을 제대로 다루는 것으로 나타났습니다사용자가 링크를 클릭하여 jquery ajax 호출 중에 오류를 처리하는 가장 좋은 방법

error: function(xhr, status, error) { 
    show_error_box("There has been an error communicating with the server<br/>The field has not been updated<br/>Please check your internet connection"); 
} 

내 아약스 호출에 다음 코드를 삽입 한 경우 사용자가 아약스 호출이 진행되는 동안 링크를 클릭합니다. 오류 상자가 표시되기 시작하고 갑자기 사용자가 새 페이지로 빠져 나옵니다.

이 상황을 처리하는 더 좋은 방법은 무엇입니까? 비침 입성 오류 메시지가 표시되는 것이 이상적입니다 (예 : '업데이트가 완료 될 때까지 기다려주십시오'). 링크 클릭이 무시됩니다. 가장 좋은 방법을 제안하는 방법은 무엇입니까?

편집 :

내가 임시과 같이 그들을 다시 사용 모든 링크를 비활성화하여이 문제를 해결;

$.ajaxSetup({ 
    beforeSend: function() {disable_links()}, 
    complete: function() {enable_links()}, 
    timeout: 15000 
}); 

function disable_links() { 
    $('a').each(function() { 
     if ($(this).attr('href')) { 
      $(this).data('href', $(this).attr('href')).removeAttr('href'); 
     } 
    }) 
} 

function enable_links() { 
    $('a').each(function() { 
     $(this).attr('href', $(this).data('href')); 
    }) 
} 
+2

(참조가 [요청으로 인해 브라우저를 다시로드에 실패 할 때 jQuery를 $ 성공 핸들러를 호출 아약스] http://stackoverflow.com/questions/4553124 : 이것은 현재의 AJAX 요청을 반환 할 때까지 링크를 클릭에서 사용자를 방지 할 수 있습니다/jquery-ajax-calls-success-handler-when-request-fails-of-browser-reload? rq = 1)'beforeunload' 핸들러가 제안됩니다. 하지만 'beforeunload'는 iOS/Mobile Safari에서는 작동하지 않습니다. –

답변

1

아마도 BlockUI jQuery 플러그인을 사용할 수 있습니다.

$(document).ajaxStart($.blockUI).ajaxStop($.unblockUI); 
+0

나는 모양을 보았지만 너무 관입 적이라는 것을 알았다. 나는 나를 위해 작동하고 그것을 편집에 넣은 해결책을 발견했다. 감사. – brad

관련 문제