За последние 24 часа нас посетил 18891 программист и 1638 роботов. Сейчас ищут 1695 программистов ...

Повторное выполнение ajax запроса

Тема в разделе "JavaScript и AJAX", создана пользователем miv-men, 7 дек 2016.

  1. miv-men

    miv-men Активный пользователь

    С нами с:
    8 дек 2013
    Сообщения:
    36
    Симпатии:
    0
    Доброго времени суток!
    После добавления товара в корзину выполняется ajax
    Код (Javascript):
    1. $(".product-button").click(function () {
    2.         var pr = $(this).attr("pr");
    3.         var cat = $(this).attr("cat");
    4.          $.ajax({
    5.           type: "POST",
    6.           url: "include/ajax-cart.php",
    7.           data: ({prod:pr,categ:cat}),
    8.           dataType: "html",
    9.           cache: false,
    10.           success: function(data) {
    11.             $(".top-cart > ul > li").html(data);
    12.       }
    13.       });
    14. });
    В data передается код "товара в корзине". Но загруженный из ajax-cart.php не выполняет ajax запросы.
    Эту проблему решил подключив к ajax-cart.php файл js
    HTML:
    1. <script src="js/script.js"></script>
    Но в этом случае повторное добавление в корзину приводит к зацикливанию и событие ajax выполняется несколько раз.

    Как можно решить эту проблему?
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    где html код из ajax-cart.php?
     
  3. miv-men

    miv-men Активный пользователь

    С нами с:
    8 дек 2013
    Сообщения:
    36
    Симпатии:
    0
    Вот фрагмент код:
    PHP:
    1. <?
    2.                                     echo '<a href="cart.php">
    3.                                                <span class="cart-icon"><i class="fa fa-shopping-cart"></i></span>
    4.                                                <span class="cart-total">
    5.                                                    <span class="cart-title">Корзина</span>
    6.                                                    <span class="cart-item">'.$col.' тов. - </span>
    7.                                                    <span class="top-cart-price">'.$sum.'<span class="rub14"> й</span></span>
    8.                                                </span>
    9.                                            </a>
    10.                                            <div class="mini-cart-content">';
    11.    
    12.                                             $result = mysql_query("SELECT * FROM cart,retail WHERE cart.id_prod=retail.retail_id AND cart.ip_bayer='$ip'",$link);
    13.                                             while ($row = mysql_fetch_assoc($result))
    14.                                             {
    15.                                                 if ($row["retail_img"] != "" && file_exists("../img/product/".$row["retail_img"]))
    16.                                                 {
    17.                                                     $img_path = 'img/product/'.$row["retail_img"];
    18.                                                     $max_wigth = 200;
    19.                                                     $max_height = 200;
    20.                                                     list($width, $height)=getimagesize("../".$img_path);
    21.                                                     $ratioh=$max_height/$height;
    22.                                                     $ratiow=$max_wigth/$width;
    23.                                                     $ratio=min($ratioh,$ratiow);
    24.                                                     $width=intval($ratio*$width);
    25.                                                     $height = intval($ratio*$height);
    26.                                                 }else
    27.                                                 {
    28.                                                 $img_path = "img/no-image.jpg";
    29.                                                 $height=200;
    30.                                                 $width=200;
    31.                                                 }
    32.                                                 echo '<div class="cart-img-details">
    33.                                                    <div class="cart-img-photo">
    34.                                                        <a href="product-details.php?cat=retail&id='.$row["retail_id"].'"><img src="'.$img_path.'" alt="'.$row["retail_title"].'"/></a>
    35.                                                    </div>
    36.                                                    <div class="cart-img-content">
    37.                                                        <a href="product-details.php?cat=retail&id='.$row["retail_id"].'"><h4>'.$row["retail_title"].'</h4></a>
    38.                                                        <span>
    39.                                                            <strong class="text-right">'.$row["col"].' x</strong>
    40.                                                            <strong class="cart-price text-right">'.$row["retail_price"].'<span class="rub14"> у</span></strong>
    41.                                                        </span>
    42.                                                    </div>
    43.                                                    <div class="pro-del">
    44.                                                        <p pdel="'.$row["id_prod"].'"><i class="fa fa-times"></i></p>
    45.                                                    </div>
    46.                                                </div>
    47.                                                <div class="clear"></div>';
    48.                                             }
    49.                                                 echo '<div class="cart-inner-bottom">
    50.                                                    <span class="total">
    51.                                                        Итого:
    52.                                                        <span class="amount">'.$sum.'<span class="rub14"> й</span></span>
    53.                                                    </span>
    54.                                                    <span class="cart-button-top">
    55.                                                        <a href="cart.php">Посмотреть карзину</a>
    56.                                                        <a href="checkout.php">Оформить заказ</a>
    57.                                                    </span>
    58.                                                </div>
    59.                                            </div>';
    60. ?>
    61. <script src="js/script.js"></script>
    С кодом все нормально он прекрасно работает.
    Проблема только с <script src="js/script.js"></script>, надо куда то это запихать, что бы два раза не было обращения к файлу скриптов.
     
  4. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    добавь какоенить скрытое поле id - генерируемое сервером - если у этого клиента будет 2 раза этот ид - зачем его добавлять ?
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    может подгрузить этот скрипт сразу на страницу и пусть реагирует на нажатие по html корзины
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.799
    Симпатии:
    1.331
    Адрес:
    Лень
    Код (Javascript):
    1. $( 'body' ).on( 'click', '.product-button', function (e)
    2. {
    3.         e.preventDefault();
    4.  
    5.         var pr = $(this).attr("pr");
    6.         var cat = $(this).attr("cat");
    7.          $.ajax({
    8.           type: "POST",
    9.           url: "/include/ajax-cart.php",
    10.        contentType: false, // важно - убираем форматирование данных по умолчанию
    11.        processData: false, // важно - убираем преобразование строк по умолчанию
    12.           data: ({prod:pr,categ:cat}),
    13.           dataType: "html",
    14.           cache: false,
    15.           success: function(data) {
    16.             $(".top-cart > ul > li").html(data);
    17.       }
    18.       });
    19. });
     
    denis01 нравится это.
  7. miv-men

    miv-men Активный пользователь

    С нами с:
    8 дек 2013
    Сообщения:
    36
    Симпатии:
    0
    --- Добавлено ---
    Не работает. Почему то если в файле ajax-cart.php нет <script src="js/script.js"></script> то скрипт не работает. А если есть то срабатывает и на ajax-cart.php и на index.php
     
    #7 miv-men, 9 дек 2016
    Последнее редактирование: 9 дек 2016
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.799
    Симпатии:
    1.331
    Адрес:
    Лень
    хозяин - барин

    но реализация кода была в том, чтобы ajax код после дополнительной подгрузки страницы - работал, привязав к глобальному тегу BODY с использованием фун. on().

    Тогда и отпадает 100500 подключений библиотек Аякса
     
  9. miv-men

    miv-men Активный пользователь

    С нами с:
    8 дек 2013
    Сообщения:
    36
    Симпатии:
    0
    Если использовать
    Код (Javascript):
    1. contentType: false,
    2. processData: false,
    то из ajax-cart.php ни что не выгружает.
    Если не использовать то опять зацыкливается. Но уже лучше, мой вариан после 4х кликов было 14 товаров в корзине, с Вашим вариантом - 8 товаров. )