Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Множественное выполнение запросов jquery ajax 
:(
    Опции темы
lemniscate
Дата 24.4.2012, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 23.11.2009

Репутация: нет
Всего: нет



Добрый день! На сайте есть несколько страниц:
Код

<a href="#" value="add.php" class="submenu">Добавить договор</a>
<a href="#" value="reestr.php" class="submenu">Реестр</a>
<a href="#" value="nomenk.php?ca_type=1" class="submenu">Номенклатура</a>
<a href="#" value="find.php" class="submenu">Поиск</a>
<a href="#" value="provider.php" class="submenu">Поставщики</a>
 *значение атрибута value содержит имя файла который необходимо загрузить с сервера.

Файлы загружаются с помощью пользовательской функции и следующего скрипта: 
Код

function getValue(p, url){            
            var value = '';
            $.ajax({
                        url: url,
                        type: "POST",
                        async: false,
                        data: p, 
                        cache: false,
                        success: function(data){
                             value = data;
                        }                
                });
            return value;
        }

$(document).ready(function(){ 
        $("a.submenu").live('click', function(event){
            $("a.submenu").removeClass("active");
            $(this).addClass("active");
            var file = $(this).attr("value"); 
            $("#main").remove();
            $(this).parent(".submenu").after("<div id=main>" + getValue('', "includes/" + file) + "</div>");    
        });
});


Здесь все работает, все ок. 

допустим пользователь зашел и загрузил файл reestr.php в котором содержится вот такая форма html:
Код

<tr>
            <td><input type="text" class="inp" size="30" name="ca_pay_nomer"></td>
            <td><input type="text" class="inp" size="30" name="ca_pay_data"></td>
            <td><input type="text" class="inp" size="30" name="ca_pay_summa"></td>
            <td><input type="text" class="inp" size="30" name="ca_pay_data_kassa"></td>
            <td><input type="text" class="inp" size="30" name="ca_pay_order"></td>
            <td><input type="submit" class="savenl" value="Сохранить" val="false" id_ca="196"></td>
</tr>

и тут же есть вот такой скрипт: 
Код

$(".savenl").live('click',function(event){
                                    var val = "&ca_pay_id=" + $(this).attr("val") + "&id_ca=" + $(this).attr("id_ca");
                                    var value = $(this).parent().parent().find('.inp').serialize();
                                    var result = getValue(value + val, "add_pay_exec.php");                                    
                                    if(result){alert(result);}
    });


т.е. пользователь ввел данные в поля формы, нажал кнопку submit и все данные ушли на сервер используя методы ajax в файл add_pay_exec.php в котором полученный запрос сохранился в mysql. 
Код

        $db->dbquery("insert into ca_pay(ca_pay_nomer, ca_pay_data, ca_pay_data_kassa, ca_pay_order, id_ca, ca_pay_summa, id_org) 
                            values( '".$_POST['ca_pay_nomer']."',
                                    '".date('Y-m-d', strtotime($_POST['ca_pay_data']))."',
                                    '".date('Y-m-d', strtotime($_POST['ca_pay_data_kassa']))."',
                                    '".$_POST['ca_pay_order']."',
                                    '".$_POST['id_ca']."',
                                    '".$_POST['ca_pay_summa']."',
                                    '".$_SESSION['id_org']."'
                                    )                
                        ");
        if($db->error){echo $db->error;}
                else{echo "Данные добавлены успешно!";}


Все работает как надо. Но вот какая проблема была замечена. Допустим пользователь загрузил первый раз страницу reestr.php внес какие то данные в форму нажал сохранить, потом он перешел на другую страницу что то там сделал и снова нажал на ссылку reestr.php, получается второй раз открыл эту страницу, снова ввел данные в поля формы и нажал сохранить то jquery уже два раза отправляет запрос на сервер в файл add_pay_exec.php и соответственно в mysql появляются две идентичные записи. Если третий раз зайдет на страницу reestr то и запрос будет отправлен три раза и соответственно в mysql уже три раза будет сохранены данные введенные в форму. Если взять полностью обновить браузер, то проблема исчезает, но начинает повторятся при повторной загрузке страницы. 

Вот такая проблема. Прошу помочь, уверен что дело в мелочи и в моем слабом знании jquery :( Заранее всем спасибо. 
PM MAIL   Вверх
GZep
Дата 24.4.2012, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: 1
Всего: 32



Перед сохранением данных можно проверить на их наличие. Да и при загрузке страницы можно вместо формы сделать сообщение, что данные уже добавлены.

А для загрузки страниц через ajax советую такой вот плагин http://www.asual.com/jquery/address/ . Почитайте примеры работы, он довольно удобен.


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
lemniscate
Дата 25.4.2012, 05:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 23.11.2009

Репутация: нет
Всего: нет



Копался копался, и нашел 

вообщем проблема лечится очень просто die();

конкретно в моем примере: 
Код

$(".savenl").die('click');
$(".savenl").live('click',function(event){


насколько я понял из моего кривого знания англицкого - браузер толи накапливает методы обработки то ли чо, и вот этот die стирает все методы которые у него накопились.  
PM MAIL   Вверх
Aliance
Дата 25.4.2012, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



Зачем использовать несуществующий атрибут value у тега ссылки, когда есть href? А переход по нему через js можно отключить, оборвав стандартное поведение события.
PM MAIL WWW ICQ Skype   Вверх
lemniscate
Дата 25.4.2012, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 23.11.2009

Репутация: нет
Всего: нет



Если можно пример? 
PM MAIL   Вверх
Aliance
Дата 26.4.2012, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



preventDefault():

Код

<a href="http://vingrad.ru" id="link">Vingrad</a>


Код

$(function(){
    $('#link').click(function(evt){
        evt.preventDefault();
        alert('Переход по ссылке будет только у пользователей с отключенными скриптами.');
    });
});

PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0697 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.