Хорошая ли идея выполнять вызов AJAX по click, прежде чем отправлять пользователя в папку href?

#javascript #ajax #asp.net-mvc-3 #jquery

#javascript #ajax #asp.net-mvc-3 #jquery

Вопрос:

У меня есть несколько сценариев, в которых при нажатии на <a> элемент на странице мне нужно отправить некоторые данные на сервер с помощью AJAX и, если все в порядке, направить пользователя туда, куда <a> указывает.

Вот поток:

  1. Пользователь что-то делает на странице.

  2. Пользователь нажимает на <a> элемент.

  3. Вызов AJAX отправляется на сервер, сервер обрабатывает запрос, отправляет ответ.

  4. Если с ответом все в порядке -> перейдите, если какая-то ошибка -> верните false из JavaScript, таким образом прервав навигацию и отобразив сообщение об ошибке.

Итак, мне просто интересно, это вообще хорошая или плохая практика и почему?

Комментарии:

1. Действительно ли вызов ajax вносит какие-либо изменения на сервере, или это просто проверка того, что все в порядке? Если это простая проверка, лучшим вариантом будет просто НЕ показывать ссылку в первую очередь, пока не будут выполнены правильные условия.

2. @Marc B — На самом деле это сохраняет несколько вещей в DB.

Ответ №1:

Не существует жестких правил, касающихся таких проблем, но одно общее эмпирическое правило заключается в том, что <a> ссылки не должны использоваться для POST-подобных действий, таких как обновление базы данных. Итак, спросите себя, что делает вызов AJAX: если он просто запрашивает некоторые данные с сервера, можно сделать это с помощью <a> ; если это вызывает какое-либо обновление, рассмотрите возможность использования <button> вместо этого .

Комментарии:

1. Я согласен. В идеальном мире я бы хотел, чтобы вызовы AJAX выполнялись на уровне страницы при нажатии кнопки, а что нет. И перенаправлять пользователя только из меню навигации или ссылки без участия AJAX. К сожалению, бизнес обычно не заботится о лучших практиках веб-разработки 😉

2. @Dimskiy: Подумайте об этом так: нормально ли переходить по ссылке без выполнения AJAX-вызова? Это то, что произойдет, если JavaScript отключен, и ваша бизнес-логика не должна пойти не так из-за этого.

3. @casablanca — «можно ли перейти по ссылке без выполнения AJAX-вызова?» Ответ — да. Под «бизнесом» я подразумеваю людей, которые принимают решения, такие как «на этой странице есть только 1 «кнопка», и при нажатии на нее данные сохраняются, и пользователь куда-то переносится»

4. @Dimskiy: В таком случае я не вижу проблемы с вашей текущей настройкой. Однако зачем вам прерывать навигацию, если вызов AJAX не важен?

5. @Dimskiy: К сожалению, это происходит слишком часто, поскольку бизнес-менеджеры понятия не имеют, о чем они просят.

Ответ №2:

В прошлом, если у ссылки был метод onClick, я всегда полностью отказывался от использования href. В вашем методе AJAX onClick просто обрабатывайте логику внутри метода и, при необходимости, вызывайте Window .Расположение внутри метода для загрузки нового URL.

Комментарии:

1. Раньше я тоже делал это таким образом. Тем не менее, я нахожу этот новый метод более «надежным», я думаю… Навигация основана на HTML, а не на JS.