Как лучше всего обрабатывать ошибки во время вызовов jquery ajax, вызванные переходом пользователя по ссылкам - PullRequest
1 голос
/ 31 января 2011

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

1 Ответ

1 голос
/ 31 января 2011

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

$(document).ajaxStart($.blockUI).ajaxStop($.unblockUI);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...