Как обновить содержимое страницы после добавления элемента с помощью AJAX

У меня есть некоторый url, который я добавляю на другую страницу (страницу корзины), но обновляя страницу, и она работает нормально, теперь я попытался сделать это с помощью Ajax, поэтому я создал функцию ajax для вызова этого URL-адрес работает, и он добавляет мой элемент.

Теперь проблема в том, что мне нужно перезагрузить другую страницу (страницу корзины), чтобы увидеть товар. Итак, как сделать, чтобы обновить эту страницу после добавления элемента, я имею в виду после вызова этого URL-адреса.

URL-адрес: <?php echo Mage::helper('checkout/cart')->getAddUrl($_product, $params); ?>

cart.phtml

...
<div class="row">
    <div class="col-md-6">
        <div class="product-qty">
            <div class="custom-qty">
                <div class="btn-plus">
                    <button type="button" class="reduced items" onclick="minusQty('<?php echo $_product->getId() ?>')">
                        <i class="fa fa-minus"></i>
                    </button>
                    <input name="qty" id="qty-<?php echo $_product->getId()?>" maxlength="12" value="1" title="Qté" class="input-text qty" type="text">
                    <button type="button" class="increase items" onclick="plusQty('<?php echo $_product->getId() ?>')">
                        <i class="fa fa-plus"></i>
                    </button>
                </div>
            </div>
        </div>
    </div>
    <?php $params = array('qty'=>2) // the input value ?>
    <div class="col-md-6">
        <button type="button" title="<?php echo $this->__('Add') ?>" class="button btn-cart pull-left-none" onclick="addToCartAjax('<?php echo Mage::helper('checkout/cart')->getAddUrl($_product, $params); ?>')" >
            <span><span><?php echo $this->__('Add') ?></span></span>
        </button>
    </div>
</div>

//JS PART
<script type="text/javascript">
    function addToCartAjax(addUrl) {
        jQuery.ajax ({
                url: addUrl,
                type : 'GET',
        })
    }
</script>

ИЗМЕНИТЬ:

Содержание cart.phtml

<div class="row">
    <div class="col-main col-lg-12">
        <div class="cart">
            <fieldset>
                ...
                <tbody>
                    <tr class="first odd"><td>Item1</td></tr>
                    <tr class="last even"><td>Item2</td></tr>
                </tbody>
                ...
            </fieldset>
        </div>
    </div>
</div>

EDIT2:

Контроллер действий

public function addAction()
{

    if (!$this->_validateFormKey()) {
        $this->_goBack();
        return;
    }
    $cart   = $this->_getCart();
    $params = $this->getRequest()->getParams();
    try {
        if (isset($params['qty'])) {
            $filter = new Zend_Filter_LocalizedToNormalized(
                array('locale' => Mage::app()->getLocale()->getLocaleCode())
            );
            $params['qty'] = $filter->filter($params['qty']);
        }

        $product = $this->_initProduct();
        $related = $this->getRequest()->getParam('related_product');

        /**
         * Check product availability
         */
        if (!$product) {
            $this->_goBack();
            return;
        }

        $cart->addProduct($product, $params);
        if (!empty($related)) {
            $cart->addProductsByIds(explode(',', $related));
        }

        $cart->save();

        $this->_getSession()->setCartWasUpdated(true);

        /**
         * @todo remove wishlist observer processAddToCart
         */
        Mage::dispatchEvent('checkout_cart_add_product_complete',
            array('product' => $product, 'request' => $this->getRequest(), 'response' => $this->getResponse())
        );

        if (!$this->_getSession()->getNoCartRedirect(true)) {
            if (!$cart->getQuote()->getHasError()) {
                $message = $this->__('%s was added to your shopping cart.', Mage::helper('core')->escapeHtml($product->getName()));
                $this->_getSession()->addSuccess($message);
            }
            $this->_goBack();
        }
    } catch (Mage_Core_Exception $e) {
        if ($this->_getSession()->getUseNotice(true)) {
            $this->_getSession()->addNotice(Mage::helper('core')->escapeHtml($e->getMessage()));
        } else {
            $messages = array_unique(explode("\n", $e->getMessage()));
            foreach ($messages as $message) {
                $this->_getSession()->addError(Mage::helper('core')->escapeHtml($message));
            }
        }

        $url = $this->_getSession()->getRedirectUrl(true);
        if ($url) {
            $this->getResponse()->setRedirect($url);
        } else {
            $this->_redirectReferer(Mage::helper('checkout/cart')->getCartUrl());
        }
    } catch (Exception $e) {
        $this->_getSession()->addException($e, $this->__('Cannot add the item to shopping cart.'));
        Mage::logException($e);
        $this->_goBack();
    }
}

person miao    schedule 22.08.2017    source источник


Ответы (1)


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

  1. добавьте это в свою функцию:

      function addToCartAjax(addUrl){
        $.ajax({
          url: addUrl,
          type: 'GET',
    
         })
         .done(function(response ) {
             //response - this is the response from the server
         });
     }
    
  2. Я точно не знаю, что возвращает ваш сервер, если это html, чем в закрытии .done:

      .done(function(response ) {
           // response - this is the response from the server
           $('.YourCartContainer').html(response);
       });
    

    поэтому, если ваш сервер возвращает фрагмент html, содержащий элементы вашей корзины, вы должны вставить его как html в свой контейнер div для корзины, но если сервер возвращает ответ Json с элементами, вам нужно перебрать их с помощью jquery и отформатировать соответствующим образом здесь например, однако опять же, я не знаю, что возвращает ваш сервер, поэтому просто примените технику:

      .done(function(response ) {
           // response - this is the response from the server
           var htmlResult = '';
           $.each(response, function( item ) {
              htmlResult += '<p>'+ item.name + '</p><br>'
           });
          $('.YourCartContainer').html(htmlResult);
       });
    

    Итак, здесь я перебрал json и создал простой HTML-код, в котором вы получите все названия товаров, которые находятся внутри корзины, надеюсь, это помогло! если вам нужна дополнительная информация о вашем случае, пожалуйста, напишите, как выглядит ответ вашего сервера !!

person Mikail G.    schedule 22.08.2017
comment
Спасибо за ваш ответ, я обновил свой вопрос, чтобы добавить html-содержимое корзины, посмотрите мое редактирование, пожалуйста, однако вы добавили URL-адрес url: '/path/to/file', Зная, что мой URL-адрес я передаю его в параметре в моей функции addToCartAjax(addUrl), посмотрите также onclick в моей кнопке. Делая это, как вы говорите, я не уверен, что это работает. - person miao; 23.08.2017
comment
извините, это должно было быть url: addUrl,, я отредактировал его, посмотрите ответ, хорошо, теперь сделайте .done(function(response ){ console.log(response) }) откройте консоль и посмотрите, что внутри вашего response, и опубликуйте это в своем вопросе, чтобы я мог видеть, что вы получаете от вашего сервера - person Mikail G.; 23.08.2017
comment
Ничего не возвращает!, я ввел это: .done(function(response ){ console.log(response) }); после jQuery.ajax ({ url: addUrl, type : 'GET', }) - person miao; 23.08.2017
comment
У меня нет ошибки, если я добавлю в конце console.log('test');, я увижу это в консоли - person miao; 23.08.2017
comment
хорошо, чем вам нужно реализовать это на сервере, проследите Mage::helper('checkout/cart')->getAddUrl($_product, $params); url, найдите функцию, которая отвечает за добавление в корзину, в конце этой функции запросите базу данных или сеанс, где когда-либо хранятся элементы вашей корзины, а затем json_decode() результат и верните его, иначе невозможно выполнить рендеринг ajax если ваш сервер не возвращает данные о товарах в корзине - person Mikail G.; 23.08.2017
comment
Пожалуйста, посмотрите еще раз мое редактирование 2, я добавил addAction()я пытался var_dump($cart) после $cart->save(); но ничего не получил - person miao; 23.08.2017
comment
Эй, теперь это работает, я добавил json_decode($cart); перед $cart->save();, и я получаю ответ в консоли, и мой контент обновляется нормально, но я просто поставил .done(function(response ) { jQuery('.container').html(response); }); не для json, один из ваших 2-х примеров, и он работает нормально? можно ли использовать success : function(data) { jQuery('.container').html(data); console.log(data); } вместо .done(function(response ) { jQuery('.container').html(response); }); ? - person miao; 23.08.2017
comment
Да, вы также можете использовать .success .done будет выполнено в любом случае, при успехе будет возвращен только успешный ответ сервера - person Mikail G.; 23.08.2017