【问题标题】:Ajax add to cart is not adding products to the cartAjax 添加到购物车不会将产品添加到购物车
【发布时间】:2013-11-27 07:09:58
【问题描述】:

*Ajax 添加到购物车不会在弹出窗口中的 onclick 操作结帐/继续时将产品更新到购物车,然后重定向到 URL http://hostip.com/checkout/cart/ *

我用过这个 JavaScript

    <script type="text/javascript">
    function setAjaxData(data,iframe){
            if(data.status == 'ERROR'){
                alert(data.message);
            }else{
                if(jQuery('.block-cart')){
                    jQuery('.block-cart').replaceWith(data.sidebar);
                }
    //            if(jQuery('.header .links')){
    //                jQuery('.header .links').replaceWith(data.toplink);
    //            }
                if(jQuery('.cart-top-container')){
                    //jQuery('.cart-top-container').empty();
                    jQuery('.cart-top-container').replaceWith(data.toplink);
                }
                var targetUrl='<?php echo Mage::getUrl('onestepcheckout') ?>';
                jQuery( "#dialog-confirm" ).dialog({
                    resizable: false,
                    //height:140,
                    modal: true,
                    buttons: {
                        "Checkout": function() {
                            window.location.href = targetUrl;
                            //jQuery(this).dialog( "close" );
                        },
                        "Continue Shopping": function() {
                            jQuery(this).dialog( "close" );
                        }
                    }
                });
            }
        }
        function setLocationAjax(url,id){
            url += 'isAjax/1';
            url = url.replace("checkout/cart","ajax/index");
            jQuery('#ajax_loader'+id).show();
            try {
                jQuery.ajax( {
                    url : url,
                    dataType : 'json',
                    success : function(data) {
                        jQuery('#ajax_loader'+id).hide();
                        setAjaxData(data,false);          
                    }
                });
            } catch (e) {
            }
        }
    </script>




*The form to submit is*

<form action="<?php echo $this->getSubmitUrl($p) ?>" method="post" id="product_addtocart_form"<?php if ($p->getOptions()): ?> enctype="multipart/form-data"<?php endif; ?>>
                        <div class="home-prouduct-details">
                            <?php $pid = $p->getId(); ?>
                            <?php $prod = Mage::getModel('catalog/product')->load($pid);  ?>
                            <?php $html= $prod->getShortDescription(); ?>
                            <?php                          
                               $str = $html;
                               $matches = array();
                               preg_match_all('#<div[^>]*>(.*?)</div>#', $str, $matches);
//                               print_r($matches[1][0]);
                            ?>
                            <a class="prod-name" href="<?php echo $prod->getProductUrl(); ?>"><?php echo $prod->getName(); ?></a>
                            <div class="prod-img">
                                <a href="<?php echo $prod->getProductUrl() ?>" title="<?php echo $this->stripTags($this->getImageLabel($prod, 'small_image'), null, true) ?>" class="product-image">
                                    <img src="<?php echo $this->helper('catalog/image')->init($prod, 'small_image')->resize(285,172); ?>" width="285" height="175" alt="<?php echo $this->stripTags($this->getImageLabel($prod, 'small_image'), null, true) ?>" />
                                </a>
                            </div>
                            <div class="home-price-button">
                                <?php $almost_gone_qty=$this->htmlEscape($prod->getData('almost_gone_qty')); ?>
                                <?php $qtyStock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($prod)->getQty(); ?>
                                <?php if (!$this->hasOptions() && strtotime($prod->getDealEndDate())>= Mage::getModel('core/date')->timestamp(time())):?>
                                    <div style="clear:both;"></div>
                                    <div class="add-to-box">
                                        <?php if($prod->isSaleable() && $qtyStock > $almost_gone_qty){ ?>
                                            <p class="availability out-of-stock">
                                                <a onclick="setLocationAjax('<?php echo Mage::helper('checkout/cart')->getAddUrl($prod); ?>',<?php echo $prod->getId();?>)" title="Add To Cart">
                                                    <img src="<?php echo $this->getSkinUrl('images/steamy.png'); ?>" title="Add To Cart" alt="Add To Cart" width="285" />
                                                </a>
                                            </p>
                                            <?php } else if($qtyStock <= $almost_gone_qty && $qtyStock!=0){?>
                                                <p class="availability out-of-stock">
                                                    <a onclick="setLocationAjax('<?php echo Mage::helper('checkout/cart')->getAddUrl($prod); ?>',<?php echo $prod->getId();?>)" title="Almost Gone">
                                                        <img src="<?php echo $this->getSkinUrl('images/almostgone.png'); ?>" title="Almost Gone" alt="Almost Gone" width="285" />
                                                    </a>
                                                </p>
                                            <?php } else{ ?>
                                                <p class="availability out-of-stock">
                                                    <a href="<?php echo Mage::getBaseUrl(); ?>sold-out" title="Sold Out">
                                                        <img src="<?php echo $this->getSkinUrl('images/soldout.png'); ?>" width="285" /><?php //echo $this->__('Out of stock') ?>
                                                    </a>
                                                </p>
                                            <?php } ?>
                                            <span id='ajax_loader<?php echo $prod->getId()?>' style='text-align: center; display:none'><img src='<?php echo $this->getSkinUrl('images/opc-ajax-loader.gif')?>'/></span>
                                    </div>                                    
                                <?php else : ?>
                                    <p class="deal-has-ended">
                                        <a href="<?php echo Mage::getBaseUrl(); ?>sold-out" title="Sold Out">
                                            <img src="<?php echo $this->getSkinUrl('images/deal_ended.png'); ?>" width="285" />
                                        </a>
                                    </p>                                
                                <?php endif; ?>
                                    <?php echo $this->getChildHtml('addto') ?>
                                    <?php //echo $this->getChildHtml('extra_buttons') ?>
                            </div>
                            <div class="home-price">
                                <div class="home-prices">
                                    <?php 
                                        echo Mage::helper('core')->currency($prod->getPrice());
                                    ?>    
                                </div>
                                <?php if($matches[1][1] !=""){ ?>
                                    <div class="home-save">
                                        <?php
                                            $savings = $matches[1][1];
                                            $savings = str_ireplace('Rs.', '&#8377;', $savings);
                                            $savings = str_ireplace('Rs', '&#8377;', $savings);
                                            echo $savings;
                                        ?>
                                        <?php //print_r($matches[1][1]); ?>
                                        <div class="home-saver">
                                            savings
                                        </div>
                                    </div>
                                <?php } ?>
                                <div class="deal-endtime"> 
                                    <?php 
                                                    echo "<div id='cdcontainer_".$prod->getId()."' class='cdcontainer'></div>";
                                                    $dealEndDate = $prod->getDealEndDate();
                                                    $dealEndDateParts = explode(" ", $dealEndDate);
                                                    $targetDateParts = explode("-", $dealEndDateParts[0]);
                                                    $year = $targetDateParts[0];
                                                    $month = $targetDateParts[1];
                                                    $date = $targetDateParts[2];

                                                    $month_array = array(
                                                            "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
                                                    );
                                                    $month = $month_array[$month-1];

                                                    $targetDate = "$month $date, $year ".$dealEndDateParts[1];
                                                    $timer_text = Mage::getStoreConfig('homedeals/basic_settings/cd_display_text');
                                                    $timer_end_text = Mage::getStoreConfig('homedeals/basic_settings/cd_end_text');     
                                                    //echo $timer_end_text;
                                                    //echo date("Y-m-d H:i:s"); echo "<br/>";
                                                    //echo $dealEndDate;
                                                    if($dealEndDate <= date("Y-m-d H:i:s")){
                                                    ?>
                                                    <script type="text/javascript">
                                                            var launchdate_<?php echo $prod->getId(); ?>=new cdLocalTime("cdcontainer_<?php echo $_product->getId(); ?>", "server-php", 0, "", "", "<?php echo '<span><h1 style=color:red;>Deal has ended - 00:00:00</h1></span>' ?><?php //echo $timer_text; ?>", "<?php echo $timer_end_text; ?>", "<?php echo $prod->getId(); ?>");
                                                            launchdate_<?php echo $prod->getId(); ?>.displaycountdown("hours", formatresults2);
                                                    </script>
                                                    <?php   }else { ?>
                                                    <script type="text/javascript">
                                                            var launchdate_<?php echo $prod->getId(); ?>=new cdLocalTime("cdcontainer_<?php echo $prod->getId(); ?>", "server-php", 0, "<?php echo $targetDate?>", "<?php print date("F d, Y H:i:s", Mage::getModel('core/date')->timestamp(time()))?>", "<?php echo $timer_text; ?>", "<?php echo $timer_end_text; ?>", "<?php echo $prod->getId(); ?>");

                                                            launchdate_<?php echo $prod->getId(); ?>.displaycountdown("hours", formatresults2);
                                                    </script>
                                                    <?php } ?>
                                </div>
                            </div>
                        </div>
                        <div id="dialog-confirm" style="display:none;">
                            <?php echo $prod->getName();?> added to your cart Successfully.
                        </div>
                        </form>

【问题讨论】:

  • 您可以尝试在浏览器控制台中跟踪问题。有什么错误吗?
  • 您好 boban0987, setLocationAjax(url,id) 调用中出现错误,无法将产品加载到购物车中。我刚刚将 magento 1.5.0.1 升级到 1.8.0。您能在表单或 javascript 中找到任何错误吗?感谢您回复 boban0987。

标签: jquery ajax magento


【解决方案1】:

请使用 magento 原型将产品添加到购物车。

这里是参考模块。

http://www.excellencemagentoblog.com/magento-add-product-to-cart-ajax

【讨论】:

  • 您好 Dharmesh Hariyani,您的扩展不支持 magento 1.8。我已经对其进行了测试,并且您的扩展程序正在解决上述问题。请在 magento 1.8 上测试产品,社区正在等待。
  • 您可以自定义。
  • 使用 ajax 将产品添加到购物车时遇到了哪个错误?
  • 我尝试了几乎所有可能的方法 Dharmesh Hariyani 先生,但是由于扩展覆盖了在 magento 1.8 上不起作用的 index-controller.php。我把它改回默认值。你能发现上面的代码有什么错误吗?
  • 没有错误显示。我的行动是: onclick="setLocationAjax('ip-address/checkout/cart/add/uenc/…)" 。这是调用添加到购物车的正确调用吗?
【解决方案2】:
  var data = jQuery('#product_addtocart_form').serialize();
                data += '&isAjax=1';   
                jQuery('#ajax_loader').show();
                try {
                    jQuery.ajax({
                          url: url,
                          dataType: 'json',
                          type : 'post',
                          data: data,
                          success: function(data){

【讨论】:

  • 不工作。您是否发现要提交的表单有任何错误?
  • 我现在收到此错误。 [17:14:12.188] GET ip-address.com/ajax/index/add/uenc/… [HTTP/1.1 500 内部服务器错误 595ms]。
【解决方案3】:

您是否发送了附件图片等数据。

【讨论】:

  • 没有。我没有在 jquery.ajax({ 但我有一个在 SetAjaxdata(data,iframe) 中收集数据的功能。
  • 我将代码更改为函数 setLocationAjax(url,id){ var data = jQuery('#product_addtocart_form').serialize();数据 += '&isAjax=1';网址 += 'isAjax=1'; url = url.replace("checkout/cart","ajax/index"); jQuery('#ajax_loader'+id).show();试试 { jQuery.ajax( { url : url, dataType : 'json', data : data,
  • 但是您需要传递所有表单数据,而不是获得 SetAjaxdata(data,iframe) 的数据验证。按照之前 cmets 中的附加图像尝试
【解决方案4】:

【讨论】:

    猜你喜欢
    • 2011-12-19
    • 2012-06-09
    • 2021-07-26
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 2020-01-14
    • 2014-11-21
    相关资源
    最近更新 更多