#javascript #ajax #asp.net-mvc-3 #jquery
#javascript #ajax #asp.net-mvc-3 #jquery
Вопрос:
У меня есть несколько сценариев, в которых при нажатии на <a>
элемент на странице мне нужно отправить некоторые данные на сервер с помощью AJAX и, если все в порядке, направить пользователя туда, куда <a>
указывает.
Вот поток:
-
Пользователь что-то делает на странице.
-
Пользователь нажимает на
<a>
элемент. -
Вызов AJAX отправляется на сервер, сервер обрабатывает запрос, отправляет ответ.
-
Если с ответом все в порядке -> перейдите, если какая-то ошибка -> верните 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.