Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Общие вопросы > PHP + AJAX Передача данных петодом POST |
Автор: nepster 20.4.2013, 03:08 | ||
Собственно вопрос такой, для работы с отправкой пост данных работаю с AJAX (jQUERY).
Все работает отлично. Только заметил одну не большую деталь. Если быстро нажимать (кучу раз тыкать по клавишам) на кнопку сохранить пока идет загрузка данных, данные будут дублироваться. Выглядит это так. Я нажима на сохранить, начинают грузится данные и не дожидаясь ответа от сервера я нажимаю еще кучу раз и в базу появляются дубликаты. Вместо 1 новости, я получаю 2 - 3 одинаковые. Подскажите пожалуйста как лучше всего бороться с такими ситуациям? Можно ли сделать так. что мы отправили запрос на сервер и пока сервер не ответит нельзя послать или игнорировать другой запрос от этой функции ? |
Автор: ksnk 20.4.2013, 07:32 |
Вариантов решения много. На клиенте можно делать кнопке отправке "disabled" до получения данных или по таймауту. Это спасет от "дрожащих рук" нормального клиента. Рисовать окошко "форма отправляется, просим не суетится...". Красивенько, разумно, требует javascript. На сервере, при генерации формы можно вставлять уникальное значение в скрытое поле. Каждый новый вывод формы клиенту вызовет генерацию нового значения. Это значение будет ключём для вставляемых записей. При получении данных проверяем, что эта форма ещё не пОстилась. Иначе - заменяем запись вместо вставки. Таким образом, одна форма, несколько раз подряд отправленная, вызовет только одно изменение. Если у клиента медленный (глючный, пропадающий) интернет и он успел перечитать свое сообщение исправить и послать его еще много раз, то последнее исправление не пропадет ;) Некоторый дискомфорт в этом решении вызывает добавление еще одного ключа в базу. Можно хранить эти ключики не в базе а в memcache или в отдельной таблице, которую подчищать со временем... |
Автор: Sanchezzz 20.4.2013, 14:59 | ||||
Ужас... encodeURIComponent не обязательно использовать для $.ajax Switch error можно упросить если обрабатывать это циклом
И да решение вашей проблемы
По рекламирую полезную штуку для сбора данных с http://ru.vingrad.com/%D0%97%D0%B0%D0%BC%D0%B5%D0%BD%D0%B0-form2Js-%D0%B2-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83-%D1%81%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE-%D0%B2%D0%B5%D0%BB%D0%BE%D1%81%D0%B8%D0%BF%D0%B5%D0%B4%D0%B0--id516302d96ccc19d409000650. |
Автор: nepster 21.4.2013, 22:21 | ||||
большое спасибо, как раз недавно задумался об этом деле. Но буду еще более хитрожопие, воспользуюсь:
от свича в обработке ошибок не хотел бы отходить, очень удоьно и четебельно выглядит оформление всех ошибок |
Автор: Sanchezzz 21.4.2013, 23:03 |
Если мне память не изменяет то Ckeditor в массив не входит его отдельно надо запихать надо. Пробывал я serializeArray 1 Мне не подошел так как не умет работать с указанного элемента только с формы, а это печально и прискорбно. 2 Возвращает массив вида { name: 'имя поля' , value:'значение'} тоже не подходит для меня. |
Автор: nepster 22.4.2013, 12:29 |
хм, я еще не разбирал serializeArray() + Ckeditor, но стало интересно. При том же коде, вот результат |
Автор: Sanchezzz 22.4.2013, 13:50 |
Скажу вам повезло, у меня получалось вот такой случай при отправке textarea пустое поле, возможно Ckeditor при submit формы вставляет в textarea данные либо у меня была старая версия) |
Автор: nepster 22.4.2013, 16:34 | ||||||
ну да, интересно если просто обычным постом кидать, в любом случае он бросает содержимое textarea на сервер. Тоесть если бы в вашей старой версии была просто отправка данных методом пост, то данные бы не долетели ? Думаю просто где-то ошиблись. Вроде очень удобная вещь
только вот достать данные не удобно. Даже вроде нет возможности как я понял, пришлось писать функцию:
|
Автор: Sanchezzz 22.4.2013, 17:32 | ||
Я лучше останусь при своем костыле по причине 2) которую я писал пару постов выше. |
Автор: nepster 22.4.2013, 18:16 | ||||
тут все рпавильно, эти визуалки работают по средствам iframe, тоесть он вставляется в textarea и создает такой эффект редактирования. Но при поссылке данных постом получаем именно данные какие нужно. всмсле, что нельзя данные добавлять?
и в целях навясчивости удобнее, тоесть если у пользователя отключен JS , что бы летели просто данные. Я так вставил к примеру csrfToken |
Автор: Sanchezzz 22.4.2013, 18:49 |
Таких людей очень маленькое количество. Если нужна совместимость то я реализую такой же метод как и у вас тут вы без условно вы правы. ![]() |
Автор: seregadgl 22.3.2017, 16:59 |
Скажу вам повезло, у меня получалось вот такой случай при отправке http://qsn.by пустое поле, возможно Ckeditor при submit формы вставляет в textarea данные либо у меня была старая версия) |
Автор: _zorn_ 23.3.2017, 17:56 | ||
Только хотел написать и перешел по ссылке. Тфутымля, опять эти дизайнеры интерьеров. Ребята это же АНТИреклама. Я вот как увижу ваш сайт у кого нибудь, В ПЕРВУЮ ОЧЕРЕДЬ отговаривать буду. Чтобы вообще не связывались. Хоть и делаете потолки вы возможно не плохо... |