iFUEL INTERACTIVE

A NY Interactive Agency and a Division of Agency212

See you on Flickr See you on Twitter See you on FaceBook Subscribe
jQuery, Magento and Ajax Add to Cart Redux
October 15th, 2009  |  27 COMMENTS  |  Development, Magento
Tags: , , , ,

My previous post on adding to the cart with ajax in Magento has generated enough interest – and pointed out enough flaws in my overly complex code – that I’ve decided to put together a simplified version, so here goes:

ajaxAddToCart.zip

Step 1: Create the server side script.
My sample script is called “addToCartTest.php” and I put it in a /scripts folder in the root of my Magento installation.


<?php
include_once '../app/Mage.php';
Mage::app();

try{
     // usage /scripts/addToCartTest.php?product_id=838&amp;amp;amp;amp;amp;qty=1
     $product_id = '';

     // get query string
     if (!isset($_GET['product_id'])) { $product_id = ''; } else { $product_id = $_GET['product_id']; }
     if (!isset($_GET['qty'])) { $qty = '1'; } else { $qty = $_GET['qty']; }

     $product = Mage::getModel('catalog/product')->load($product_id);

     $session = Mage::getSingleton('core/session', array('name'=>'frontend'));
     $cart = Mage::helper('checkout/cart')->getCart();

     $cart->addProduct($product, $qty);

     $session->setLastAddedProductId($product->getId());
     $session->setCartWasUpdated(true);

     $cart->save();

     $result = "{'result':'success'}";
     echo $result;

} catch (Exception $e) {
     $result = "{'result':'error'";
     $result .= ", 'message': '".$e->getMessage()."'}";
     echo $result;
}


Step 2: Create the ‘html’ page
Obviously, you’d be putting this code into your product detail page or wherever you’re trying to add the item to the cart from.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Ajax add to cart sample</title>
<script src="/scripts/jquery-1.3.2.min-noconflict.js"></script>
<script type="text/javascript">
jQuery(document).ready(function($) {
     $("#buyNowButton").click(function(){
          var qty = $("#qty").val();
          var product_id = $("#buyNowButton").attr("product_id");

          var params = "product_id=" + product_id + "&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;qty=" + qty;        

          var result = $.getJSON("/scripts/addToCartTest.php", params, function(data, textStatus){
               if (textStatus == "error"){
                    alert("There was an error adding this item to your cart.  Please call customer service for assistance.", "Error");
                    return;
               }

               if (data.result == "error"){
                    alert("Sorry, an error occurred while adding the item to your cart.  The error was: '" + data.message + "'");
                    return;
               }

               alert("Thanks!  The item has been added to your cart!")
          });
     });
});
</script>
</head>
<body>
     <input type="text" id="qty" value="1" />
     <a id="buyNowButton" product_id="972" href="#">Buy Now</a>
</body>
</html>

That’s it!

Prerequisites:
1. jQuery (Because Magento uses prototype and scriptaculous, you have to use jQuery in “no conflict” mode);
I’ve included the source code, along with the no-conflict version of jQuery in the zip file attached.

Let me know if you’re using this code (helps my ego)!

=============================
“e-commerce done right

http://www.ifuelinteractive.com

COMMENTS

  • Dude, you saved me a lot of time. Worked perfectly, no strings attached.

    Thanks!

  • molecule

    Nice, any idea how to do this with configurable products?

    Thanks

  • Sam

    Excellent stuff, works perfectly. Now to figure out how to update the cart totals on the page…gonna be jquery to the rescue me thinks!

  • dude you are the man. I just changed it slightly to work with prototype :)

    thanks!!

  • Cool script but it appears that this won’t work from a page that is not hosted on an external site. Thanks for posting.

  • I typed too fast. I was unable to get this script to work from a remote server (e.g. blog, website, etc.)

  • Jon

    I am going to use this, but I just did a quick test with some modifications to handle multiple products. Get in touch if you’d like to see my changes – but they are pretty simple. I just send multiple product ids and quantities to the php script (I use a single delimited string for each set of product ids and for quantities, then explode it on the server and add each item to the cart). Works great, thanks!

  • Is this limited to any particular produce type(s)? I need a solution that will work for simple, configurable and bundled items, and this is definitely the most elegant method I’ve come across so far.

  • Thank you very much, greatly appreciated, we need more people like you helping us out with magento

  • Joe

    Hi, I am getting an error {‘result’:'error’, ‘message’: ‘Mage registry key “_singleton/core/session” already exists’} any ideas?

  • Madhu

    Hi..i have changed a bit and i am able to add multiple products..but prblm is i have to update mycart in the page(the div)..have u tried it?if so pls mail me.
    Thank you!

  • The script worked great, but for some reason it messed up my sessions. Magento kept redirecting to the folder of the ajaxAddToCart files. Fixed the issue by renaming a value in app/etc/local.xml, not sure what happened though. any ideas? (more fix info here: http://www.yireo.com/tutorials/magento/magento-administration/280-unable-to-login-into-the-magento-backend)

  • Ravi

    Let’s help your ego. It worked exactly as it mentioned. Great idea for basic starting. Thanks so much

  • This is really a simple version. I have been using Magento for 3 years now and every time I look for something like this.

  • Thx for sharing your approach! Your post helped me allot Im creating a complex product configurator within mage. At the end, I need a “add to cart” function of my created product and this snipet worked like a charm :)

  • Some editions: for some reasons, the async way of using getJSON (wich is a short for jQuery.ajax()) wont work for my setting, so I used jQuery.ajax() with async:false to make the call.

    In addition I found out parsing the result JSON oject with jQuery.parseJSON() will fail cause the result JSON is invalid. You have to use double quatation marks when building your JSON string within the PHP. Example:

    $result = “{\”result\”:\”success\”}”;

  • Tom

    Thanks for sharing! I ran into a couple of issues when interpreting the json result.

    This seems to have done the trick:

    $result = array('result'=>'success');
    echo json_encode($result);

  • i have not got your coding pattern for add to cart.i have placed addToCartTest.php and jquery-1.3.2.min-noconflict.js of root in /script folder but where i would to put addToCartTest.html , i am not clear how to use this html file
    can u please help how this script run perfectly for me ??
    Thanks

  • selepok

    Thank’s. Easy & perfect!

  • Raj

    Hi, first of all thanks for your good work.. its easy and fast to implement, but here is what i require.. i am on product listing page and i need to reflect the cart updated quantity in top menu and side as well. can you please help me out with the solution i am also trying to do so. any help will be appreciated.
    Thanks

  • Alexandre

    Hi,
    I’m actually using Magento for a school projet and I used your script. However i had to create some configurable products and i dunno how to implement it so that this script would work with this type of product. Would someone face the same issue and have a solution? Thx.

  • If the product have options? How to use this? Thanks

  • Does this can work in magento 1.5 ? anyhow, I’m downloading to test it.

  • Chris Hartin

    Hi there, how do you implement it into the list.phtml page? I have added it but it is not adding the products? Thank you.

  • krishana singh

  • Ron

    This code worked and gave the success message that the product was added to cart but nothing was added. Any ideas?

  • nathan

    Hi,

    How to use this? please explain. because script root not in my root folder. so please explain

LEAVE COMMENT
Your name:  (required)

Your email:  (required, will not be published)

Website:  (not required)

Message:  (required)

Categories
Archives
Tags
From Our Twitter (@ifuel)
Our Interactive Agency on Facebook
Copyright iFuel Interactive © 2010. All Rights Reserved.
Going up? Click here.A NY INTERACTIVE AGENCY