2011-01-31 1 views
1

Я постепенно улучшаю ajax-tivity (TM) своего сайта и недавно добавил в некоторые довольно простые обработки ошибок. Мои вызовы выполняются с помощью метода jquery .ajax(), и я отображаю ошибки пользователю с помощью функции show_error_box (message) . Я обрабатываю все мои ajax, возвращая скрипты, поэтому проверка на стороне сервера была простой - я просто отправляю назад вызов show_error_box. Для других ошибок, я просто поместить следующий код в моем .ajax вызовКак лучше всего обрабатывать ошибки во время 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"); 
} 

Я обнаружил, что это дело хорошо с большинством вопросов (без подключения, тайм-аут, и т.д.), но это дело плохо с ситуацией, когда пользователь нажимает на ссылку, пока вызов ajax все еще продолжается. Появится окно с ошибкой, после чего пользователь будет удален на новую страницу.

Каков наилучший способ справиться с этой ситуацией? В идеале мне бы хотелось, чтобы отображалось неинтрузивное сообщение об ошибке (например, «дождитесь завершения обновления»), и щелчок по ссылке игнорируется. Любые предложения о том, как наилучшим образом достичь этого?

EDIT:

Я решил это временно отключить все ссылки, то повторное включение их как так;

$.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 $ .ajax вызывает обработчик успеха, если запрос не удается из-за браузера перегрузки] (http://stackoverflow.com/questions/4553124/jquery-ajax-calls-success-handler-when-request-fail-why-of-browser-reload? rq = 1), где предлагается обработчик 'beforeunload'. Помните, что 'beforeunload' не работает на iOS/Mobile Safari. –

ответ

1

Возможно, вы можете использовать плагин jQuery BlockUI. Это позволит запретить пользователю нажимать на ссылки, пока текущий AJAX возвращает запрос:

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

Я посмотрел, но нашел плагин слишком навязчивым. Я нашел решение, которое работает для меня и помещено в мое редактирование. Благодарю. – brad

Смежные вопросы