0

私は電子商取引システムを持っています。そして、スクリーンショットのようにカートに商品を追加していますここに画像の説明を入力

カートに入れるボタンをクリックしたとき。ブートストラップ ポップオーバーであるショッピング カートの通知を表示しています。主な問題は、同じ通知を受け取った別の製品に決定したときです。

「商品Aを追加しました」と書いています。追加するすべての異なる製品でそれを行うと、製品Aが追加されます。追加は正しいが、通知が間違っている。

これが私のjQueryコードです...

$('.quick-add-cart').click(function(){ //Sepete Ekleme İşlemi yapıyoruz.
     $('#cart-popover').attr('data-content','');
     productID  = $(this).parents('.productbit').attr('id');
     $.ajax({
          type: "POST",
          url: "ajax/add_to_cart.php",
          dataType: 'json',
          data: {            
              productID : productID
          },
          error: function(jqXHR, exception) {
              if (jqXHR.status === 0) {
                   alert('Bağlantı sağlanamadı.\n Lütfen internet bağlantınızı kontrol ediniz.');
          } else if (jqXHR.status == 404) {
              alert('Sayfa bulunamadı. [404]');
          } else if (jqXHR.status == 500) {
              alert('Sunucu Hatası [500].');
          } else if (exception === 'parsererror') {
              alert('Requested JSON parse failed.'+ jqXHR.responseText);
          } else if (exception === 'timeout') {
              alert('Time out error.');
          } else if (exception === 'abort') {
              alert('Ajax istemi durduruldu.');
          } else {
              alert('Beklenmeyen Hata.\n' + jqXHR.responseText);
          }
          },
          success: function (data) {
              if (data.insert_count > 0) {
                  cart_old_count = $('#cart_count').text();
                  cart_new_count = parseInt(cart_old_count,10) + data.insert_count;
                      $('#cart_count').text(cart_new_count);
              }
                  $('#cart-popover').attr('data-content',data.queryresult).popover('show');
                  setTimeout(function() {
                      $('#cart-popover').popover('hide');
                  }, 5000);
              }
                            });
                       });

そして、ここに私のadd_to_cart.phpがあります

require_once '../includes/class/class.cart.php';
        include_once '../locale.php';

        session_start();
        $C = new Cart(); 

//Sepete Ürün Ekliyoruz
if (isset($_POST['productID'])){
    if (!isset($_SESSION['userid'])) {
        $jsonData['queryresult'] = "Sepete Ekleme Yapabilmek için Bayi Girişi Yapmalısınız !";
    } else {
        $productid = $_POST['productID'];
        $product   = $C->get_product_fields('product', $productid);

        $jsonData['update_count'] = 0;
        $jsonData['insert_count'] = 0;

        $cart_error = FALSE;

        if ($C->is_in_cart($productid)) {
            if ($C->update_cart($productid))
                $jsonData['update_count'] += 1;
            else {
                $jsonData['queryresult'] = $C->cart_errors($productid);
                $cart_error = TRUE;
            }
        } else {
            if ($C->add_to_cart($productid))
                $jsonData['insert_count'] += 1;
            else {
                $jsonData['queryresult'] = $C->cart_errors($productid);
                $cart_error = TRUE;
            }
        }

        if ($cart_error === FALSE) {
            if ($jsonData['insert_count'] == 1){
                $jsonData['queryresult'] = "Bir paket ".$product." eklendi.";
            }

            if ($jsonData['update_count'] == 1){
                $jsonData['queryresult'] = "Bir paket daha ".$product." eklendi.";
            }

            if ($jsonData['insert_count'] == 0 && $jsonData['update_count'] == 0){
                $jsonData['queryresult'] = "Ürünü sepete ekleme sırasında hata oldu.";
            }
        }
    }
        header('Content-type: application/json');
        echo json_encode($jsonData);
}
4

1 に答える 1

0

関連する問題: data-content 属性が更新されたときに Twitter ブートストラップ js ポップオーバー コンテンツが更新されない

問題を解決するには、次の 2 つの変更が必要です。

  1. の代わりに.attr('data-content', data.queryresult)、使用する必要があります.data('content', data.queryresult)

  2. .popover('destroy')コンテンツを更新する前に使用する必要があります。これによりpopover、非同期処理で迷子になるのを防ぎます。

以下はサンプル コードです。setTimeout を使用して Ajax 呼び出しをシミュレートしました。

function displayPopover(msg) {
  $('#cart-popover').popover('destroy');
  $('#cart-popover').data('content',msg).popover('show');
  setTimeout(function() {
      $('#cart-popover').popover('hide');
  }, 5000);
}

// add first product to cart
setTimeout(function() { displayPopover('product 1') }, 2000);

// add second product to cart
setTimeout(function() { displayPopover('product 2') }, 4000);

ここで実際の動作を確認できます: http://jsbin.com/UXAxEBE/1/

ヒント: 問題が php 側にあるのか JavaScript 側にあるのかわからないようなタイプのエラーが発生した場合は、console.log(data.queryresult)javascript で、php が正しいコンテンツを返し、問題がクライアント側にあることを検証する必要があります。

于 2013-09-01T14:55:25.480 に答える