AJAX-проблемы с jquery-запросом отправляются только иногда - PullRequest
0 голосов
/ 06 апреля 2011

У меня есть веб-сайт, на котором есть несколько товаров, пользователь может добавить один в свою корзину и получить на экране отзыв через ajax, который обновила корзина.

Однако на некоторых продуктах это не работает, ниже приведен код, который используется.

PHP

function updateBasket()
    {
        $this->load->model('Checkout_model');
        $this->load->model('Product_model');
        $derivativeId = $this->input->post('selDerivative-1');
        $quantity = $this->input->post('selQuantity');
        $derivative = $this->Product_model->GetProducts(array('pdId' => $derivativeId), 'small');

        // Add item to shopping bag.
        $attributes = $this->Product_model->GetProductDerivatives(array('pdId' => $derivativeId));
        $this->Checkout_model->AddProduct($derivative, $attributes, $quantity);
        $this->data['message'] = 'Item added to Shopping Bag.';

        // Update Delivery Price
        $this->Checkout_model->updateDelivery(49);

        $this->data['items'] = $this->Checkout_model->GetProducts();

        $this->template
        ->build('checkout/quickbasket', $this->data);
    }

ОБРАТНАЯ СВЯЗЬ HTML

    <?php
    //var_dump($items);
    //print_r($this->session->userdata);
?>

<div id="basketoverview">
<div id="quickbasket">
    <h1><?php echo $this->cart->total_items(); ?> item in bag</h1>
    <?php foreach ($items as $item) : ?>
        <div class="item">
            <img src="<?php echo base_url().$item['imageUrl'];?>" alt="<?php echo $item['imageAlt'];?>" width="70"/>
            <h4><?php echo $item['imageAlt'];?></h4>
            <span class="price">&pound;<?php echo $item["price"]; ?></span>
            <span class="qauntity">Quantity: <?php echo $item['qty']; ?></span>
        </div>
    <?php endforeach; ?>
</div>
<div id="basket_options">
    <a href="/checkout/showbag">VIEW BAG</a> / <a href="/checkout/delivery_and_billing">CHECKOUT</a>
 </div>
 </div>

** AJAX SCRIPT **

$("#frmProducts").submit(function(){
            var dataSet = $("#frmProducts").serialize();
            $.ajax({
              url: "<?php echo base_url();?>products/updateBasket",
              data: dataSet,
              type: "POST",
              success: function(data){
                $('html, body').animate({scrollTop:0}, 'slow');
                $("#miniCart").load("<?php echo base_url();?>checkout/loadCartView");
                $('body').append(data); 
                $('#basketoverview').fadeIn(2000);
                setTimeout(function () { $('#basketoverview').fadeOut(2000).hide(); }, 8000);
              }
            });
            return false;
        });

УСПЕШНЫЙ ПОЧТА

selDerivative-1 171
selQuantity 1
submitted   1

** НЕУДАЧНЫЙ ПОЧТА **

selDerivative-1 223 
selQuantity 1
selURL-1    colonial/dining/prestige-dining-for-six
submitted   1

Форма продукции

<?php echo form_open(current_url(), array('id' => 'frmProducts'), array('submitted' => '1')); ?>

                <div class="formRow">
                    <label for="rattanType"><?php echo $product_attribute_names; ?>&nbsp;</label><br />
                    <?php
                    $options = array();
                    foreach ($product_derivatives as $derivative) :
                        $options[$derivative['derivativeId']] = $derivative['attributeValues'];
                    endforeach;
                    ?>
                    <?php echo form_dropdown('selDerivative-1', $options, $product_details->pdId, 'class="select clear" id="selDerivative-1"'); ?>
                </div>

                <?php if (count($individual_products) > 0) : ?>
                <div class="formRow">
                    <label for="itemType">Item</label><br />
                    <select class="select clear" id="selURL-1" name="selURL-1">
                        <option value="<?php echo current_url(); ?>">Full Set</option>
                    <?php foreach ($individual_products as $product) : ?>
                        <option value="<?php echo site_url($product->fullProductPath); ?>"><?php echo $product->productTitle; ?> - &pound;<?php echo ($product->productSavingType != 'none' ? $product->productSavingPrice : $product->productPrice); ?></option>
                    <?php endforeach; ?>
                    </select>

                    <input id="btnGo-1" name="btnGo-1" type="submit" value="GO" />
                </div>
                <?php endif; ?>

                <div class="formRow">
                    <label for="addQty">Quantity</label><br />
                    <?php
                    $options = array();
                    for ($i = 1; $i < 10; $i++) :
                        $options[$i] = $i;
                    endfor;
                    ?>
                    <?php echo form_dropdown('selQuantity', $options, '1', 'class="small select clear"'); ?>
                </div>

                <input type="submit" value="add to bag" name="btnAddToBag" id="btnAddToBag" />

            <?php echo form_close(); ?>

Я абсолютно уверен, почему первое сообщение будет добавлено в корзину, а второе - нет, есть ли у кого-нибудь идеи посмотреть на мой код?

1 Ответ

0 голосов
/ 29 апреля 2011

Это своего рода длинный снимок, но у меня есть подозрение, что у вас проблема с сеансом.У менеджера сеансов CI есть несколько проблем, случайным образом создающих новые сеансы из вызовов Ajax.Проблема и некоторые решения обсуждаются здесь:

http://codeigniter.com/forums/viewthread/186070/

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