954,597 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Prototype js Ajax evalJSON()

Below is my javascript code. It seems to hanging up at the "var data = transport.responseText.evalJSON();" part.

Here is a link to see how my html is made.
http://twisted.visionsminis.com/price/compressors

if (!window.WAUpdater) var WAUpdater = new Object();

WAUpdater.Methods =
{
	options: {
		redirectOnError: true,
		baseUrl: "",
		updateColor:'#666666',
		mode:"add",
		removeRow:null
	},
	_options: new Object,
	setOptions: function(options) {
		Object.extend(this.options, options || {});
	},
	
	showAjaxModal: function()
	{
		Modalbox.show('<div id="MB_loading"><br/>Please wait...</div>'); 
	},
	
	updateMiniCart: function(transport, options)
	{
		this.setOptions(options);
		Modalbox.hide();
		window.scroll(0,0);
	  	var data = transport.responseText.evalJSON();
		//IF THERE'S ANY ERROR
		if(data.error)
		{
			
			if(this.options.redirectOnError)
			{
				if(data.url) window.location = data.url;
				else history.go(-1);
			}
			else
			{
				var error_msg = 'Sorry. There was an error in your operation.';
				if(data.error_msg) error_msg = data.error_msg;
				Modalbox.show('<div id="MB_message">ERROR:'+error_msg+'</div>',{modal:true}); 
			}
			
		}
		else
		{
			var item_count= data.item_count;
			var cart_subtotal = data.cart_subtotal;
			var onepage_checkout = data.onepage_checkout;
			var link_text = data.link_text;
			var cart_subtotal_str = data.cart_subtotal_str;
			var cart_subtotal_tax = data.cart_subtotal_tax;
			var my_cart_str = data.my_cart_str;
			var qty_str = data.qty_str;
			var checkout_str = data.checkout_str;
			var no_cart_str = data.no_cart_str;
			
			//update item count on top menu
			if($$('a.top-link-cart').size()!=0 && link_text)
			{
				$$('a.top-link-cart')[0].update(link_text);
			}
			
			
			if(this.options.removeRow)
			{
				if($$('.mini-cart h5').size()!=0 && item_count==0)$$('.mini-cart h5')[0].remove();
				new Effect.SlideUp(this.options.removeRow);
			}
			
			//update recently added items
			if(data.recent_items)
			{
				if($$('.mini-cart h5').size()!=0) $$('.mini-cart h5')[0].remove();
				if($$('.mini-cart .content').size()!=0) $$('.mini-cart .content')[0].remove();
				if($$('#cart-sidebar').size()!=0) $$('#cart-sidebar')[0].remove();
				// insert recently updated items after checkout button
				if ($$('.mini-cart').size() != 0) {
					$$('.mini-cart')[0].insert(data.recent_items);
					decorateList('cart-sidebar', 'non-recursive');
					new Effect.SlideDown('cart-sidebar');
				}
			}
			
			//total price
			if($$('.mini-cart .head').size()!=0)
			{
				var minicart_itemcount = qty_str;
				
				if(item_count > 0)
				{
					var minicart_string = '<h4>'+my_cart_str+'</h4>'+minicart_itemcount + '<p class="subtotal">'+cart_subtotal_str+'<strong>'+cart_subtotal+'</strong>'+cart_subtotal_tax +'</p>';
					if($$('.mini-cart .actions').size() ==0 && onepage_checkout) 
					{
						$$('.mini-cart .head')[0].insert({
							after: '<div class="actions"><button class="form-button" onclick="setLocation('+this.options.baseUrl+'\'/index.php/checkout/onepage/\')" type="button"><span>'+checkout_str+'</span></button></div>'
						});
					}
				}
				else
				{
					if($$('.mini-cart .actions').size() !=0) $$('.mini-cart .actions')[0].remove();
					var minicart_string = '<h4>'+my_cart_str+'</h4>';
					$$('.mini-cart .head')[0].insert({
						after: '<div class="content"><p>'+no_cart_str+'</p></div>'
					});
				}
				
				$$('.mini-cart .head')[0].update(minicart_string);
				
				new Effect.Highlight($$('.mini-cart .head')[0],{startcolor: this.options.updateColor});
				if($$('.mini-cart .head .head').size()!=0) new Effect.Highlight($$('.mini-cart .head .head')[0],{startcolor: this.options.updateColor});
				if($$('.mini-cart .actions').size()!=0) new Effect.Highlight($$('.mini-cart .actions')[0],{startcolor: this.options.updateColor});
			}
			
			if($$('#shopping-cart-totals-table tfoot').size()!=0)
			{
				$$('#shopping-cart-totals-table tfoot')[0].update(data.totals_footer);
				$$('#shopping-cart-totals-table tbody')[0].update(data.totals_top);
				new Effect.Highlight($$('#shopping-cart-totals-table tfoot')[0],{startcolor: this.options.updateColor});
				new Effect.Highlight($$('#shopping-cart-totals-table tbody')[0],{startcolor: this.options.updateColor});
			}
			
		}
	}
};

Object.extend(WAUpdater, WAUpdater.Methods);
function submit_ajax_cart(url)
{
	new Ajax.Request(url, {
	  method: 'get',
	  onLoad:WAUpdater.showAjaxModal(),
	  onComplete: function(transport)
	  {
	  	bu =  url.substring(0,url.lastIndexOf("/checkout") ) ;
	  	WAUpdater.updateMiniCart(transport, {baseUrl:bu, mode:"ADD"});
	  }
	});
}

function submit_ajax_cart_p(url)
{
	window.opener.submit_ajax_cart(url); 
}

/* from this section on is premium */
function delete_ajax_cart(url,row)
{
	new Ajax.Request(url, {
	  method: 'get',
	  onLoad:WAUpdater.showAjaxModal(),
	  onComplete: function(transport) 
	  {
		bu =  url.substring(0,url.lastIndexOf("/checkout") ) ;
	  	WAUpdater.updateMiniCart(transport, {baseUrl:bu, mode:"DELETE", removeRow:row, redirectOnError: false});
	  }
	});
}
twistedind
Newbie Poster
1 post since Apr 2009
Reputation Points: 10
Solved Threads: 0
 

Seems like a debugging issue, have you tried a (JavaScript) debugger? With a debugger you can easily step through the code, and see which variables are filled with what values, and when they change.

See it as a slowmotion running your webpage, while you can inspect every value if it is correct.

I use Netbeans:
www.netbeans.org

But there are more:
Addon for Firefox: https://addons.mozilla.org/nl/firefox/addon/216
Also you may use Firebug: https://addons.mozilla.org/nl/firefox/addon/1843

I hope this helped.

kvdd
Junior Poster in Training
55 posts since Jun 2008
Reputation Points: 17
Solved Threads: 2
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You