Хорошая ли идея обойти повторную отправку формы при помощи ajax?
Может я чего не понимаю, но в чём смысл обхода повторной отправки формы при помощи ajax?
Вводная: из БД берётся значение свойства и выводится в вид, отправляем форму (для теста без последующего редиректа), изменяем в обработчике значение этого свойства и пишем его в БД, но так как редиректа у нас нет, то данные берём не из БД (как это было бы при редиректе), а просто выводим в вид уже изменённое значение (потому что нужно текущее значение без повторной выборки из БД).
Кто-то поясните, как это делается при ajax, ведь его очень часто советуют в качестве обхода повторной отправки данных.
Ну так я аяксом отправлю запрос, а вид как я получу с текущими данными? Редиректом на jquery и выводом из БД? Браво. А если у меня свойство устанавливается только во время выполнения запроса без записи в БД (например тупо вывод сообщений без сессий), то как я в виде получу его значение, оно же потеряно будет РЕДИРЕКТОМ после ajax. Подгрузкой данных в стиле SPA? Тогда зачем вообще предлагать ajax для такого обхода, такой костыль отпадает сам собой при SPA)))
Может я что-то не так понимаю?
Сам применяю токен на форме и фиг с ним с сообщением браузера о повторной отправке, главное что форма не обрабатывается при несовпадении хоть ты заобновляйся.
ну так аяксом я отправил запрос, как мне получить вид? редиректом и выводом данных из БД?
так я и просто редирект могу запилить на самого себя и не будет никакой повторной отправки, я не пойму, как аякс решает проблему с повторной отправкой формы браузером?
QNA-1976, А никак вообще. Лично я бы поставил 301 редирект или бы вывел флэш сообщение.
Вы немного забыли что http это stateless протокол, любой запрос атомарный а уж ваша логика восстанавливает состояние объекта и что то делает или не делает.
Если же вам нужны данные в форме, то нормальная практика отдавать обновленную модель через ajax после успешной операции и обновление формы на клиенте. Ну или новую модель с ошибками, если они произошли на сервере.
Владимир Коротенко, Вы не поняли, я отправил ajax запрос из формы логина, обработчик меня залогинил, что дальше делается? Мне нужен шаблон залогиненного и вид, например, кабинета залогиненного.
QNA-1976, Если вам он нужен то отрендерьте его, ДО этого запроса.
Получив ответ вы записываете в куки ваш токен и скрываете форму логина
заполняете имя пользователя
с снимаете аттрибут display:none с блока пользовательского кабинета
Обычно это используется для логина на главной странице сайта.
Владимир Коротенко, ага, осталось всего-навсего сделать контроль авторизованного: сессия умерла, а он кнопку нажал и отправил запрос в области авторизованного ) короче дело ясное, что дело тёмное, благодарю.
QNA-1976, При отправке аяксом вы контролируете логику.
То есть после того как щелкнули по кнопке, обработчик с кнопки снимается и повторная отправка не случится, потому как некому отправлять. Так что посоветовали нормально.
function onSubmit(){
// взять кнопку
// снять обработчик onSubmit
// запустить спинер
// запустить запрос
// обработать ответ или ошибку
// остановить спинер
}
ага, осталось всего-навсего сделать контроль авторизованного: сессия умерла, а он кнопку нажал и отправил запрос в области авторизованного ) короче дело ясное, что дело тёмное, благодарю.
В общем то немного не так. Это именно "сахар" для нетерпеливого пользователя. В случае NET mvc всю грязную работу на себя берет фреймворк.
Впрочем общие принципы остаются верными для любого фреймворка.
Проверить авторизацию
Отрендерить базовый HTML (с учетом что за пользователь)
Отдать расширенные возможности через аякс (как то всякие логины без перезагрузки, автодополнение, выбор товара , операции с корзиной)
У тебя просто в голове смешалось два понятия, запрет повторной отправки == редирект.
Забудь про редирект. Он при аяксе не нужен.
Лучше выучи получше. ч то такое аякс. Тогда дурацких вопросов типа "как я получу с текущими данными" возникать не будет. Потому что аякс это как раз про то, как получить данные с сервера. Без всяких редиректов. Вот как здесь, на этом форуме, ты отправляешь ответ или комментарий.
Если же после отправки формы тебе обязательно нужен редирект (о чем ты, разумеется, не упомянул в вопросе), то тогда без разницы, что использовать.
При чем здесь дурак и кусок текста? У тебя вопрос был про редирект.
Заканчивай с тяжелыми наркотиками и соберись с мыслями.
Поробуй задать хоть один осмысленный вопрос.
FanatPHP, комментарий какой-то у Вас странный, про наркотики какие-то, я не специалист по наркотикам, вопрос выше, вставить текст в блок без перезагрузки может любой дурак
Если у тебя какой-то новый вопрос, то его надо задать в форме вопроса, а не в виде комментария.
И написать подробно - кто дурак, что за блок и куда его надо вставить.
Но сначала надо привести в порядок ту кашу, которая у тебя в голове.
FanatPHP, вопрос в вопросе, в комментариях я не задавал тебе вопрос, хитрожопый какой на других переводит стрелки
а вставить текст в блок без перезагрузки может любой дурак, только вот если данные не сохранялись в БД то где он их возьмёт после перезагрузки (подгрузки), наверное, в сессиях, ах да забыл мы же из php перехали по ходу в js нам же теперь хранилище локальное нужно организовать мы же не можем тупо на js написать, нам обязательно json на php приспичило собирать под каждый аякс
Да-да, конечно, это мне надо проспаться.
Это ведь я не понимаю, как работает примитивный механизм, который испрользуется на 90% сайтов, а не ты.
Ты нафантазировал себе каких-то сложностей, но из-за своего зазнайства не можешь толком сформулировать, в чем твоя проблема.
Или описывай свои проблемы толком, не считая всех вокруг идиотами, или разбирайся сам.
FanatPHP, не неси ахинею, не нужен ajax для решения проблемы, потому что её не будет - это же логично, ajax не решение проблемы с повторной отправкой, но уход от неё тупой
Что "и"? Ты утверждаешь, что аякс не помогает. Тостер добавляет твой коммент аяксом. Это значит, что у тебя из-за повторной отправки коменты должны дублироваться. Они дублируются?
Ну вот мы снове вернулись к твои фантазиям. Ты себе вообразил будто аякс не помогает, и., видимо, можешь запостить на тостер двойной комментарий, но никто больше повторную отправку не видит.
Боюсь, тебе надо к доктору. Такие галлюцинации говорят о серьезных проблемах. :(
Я совершенно ничего не понял. Аякс это технология позволяющая получать данные без перезагрузки страницы. Им ничего нельзя проверить. Только отправить и получить данные. Проверку заполнения формы не обязательно делать на стороне клиента на том же Jquery, можно на северной части и потом получить код статуса, но конечно лучше все проверять до отправки и после.