Produkt-Konfigurations-Modul ändert nur einmal den Preis

Ich habe ein Produkt-Konfigurator-Modul geschrieben.

Das funktioniert auch sehr gut. Leider bin ich drauf gekommen, dass der Preis immer nur einmal geändert wird.

Also als konkretes Beispiel: Ich habe einen Computer und möchte dort eine größere Festplatte auswählen. Wenn ich das mache, dann ändert sich der Preis. Wenn ich es aber dann nochmals auf einen anderen Wert stelle, dann wird der Preis nicht mehr geändet.

woran kann das liegen?

schlecht programmiert, würde ich sagen

Vielleicht kann mir dann jemand auf die Sprünge helfen. Hier ein kleiner Ausschnitt:

$(document).ready(function(){
var productPrice = 999999.99;
var shortdescNumbers = {“hdd”: “3_2”, “memory”: 2, “hdd_”: “3_1”};

//split SSD & HDD
var hdDesc = $(“.shortdesc_3”).html().split(“+”);
if(hdDesc.length > 1){
$(“.shortdesc_3”).html(‘<span class=“shortdesc_3_1”>’+hdDesc[0]+‘</span> + <span class=“shortdesc_3_2”>’+hdDesc[1]+‘</span>’);
}
else{
$(“.shortdesc_3”).html(‘<span class=“shortdesc_3_1”>’+hdDesc[0]+‘</span> <span class=“shortdesc_3_2”></span>’);
}
productPrice = $(“#productPrice > strong > span”).first().html();
productPrice = productPrice.replace(/./g, “”);
productPrice = productPrice.replace(/,/g, “.”).trim();

var defaultIcon = $(“#morePicsContainer > ul > li:first > a > span.artIcon > img”).attr(“src”);
var defaultDetail = $(“#wrap > a > img”).attr(“src”);
var defaultImage = $(“#morePicsContainer > ul > li:first > a”).attr(“href”);

var prices = ;
//Selection Changed
$(“.dropDown .drop a”).click(function(){
loadDynamicData($(this).html());
refreshProductPrice();
});

//Load initial Data
$(“.dropDown .drop a.selected”).each(function(){
loadDynamicData($(this).html());
});

refreshProductPrice();

function formatPrice(price){
var comma = Math.round(price*100)%100;

  var result = ","+fillDigits(comma, 2);
  
  while(price &gt; 0){
  	var group = Math.floor(price%1000);
  	price = Math.floor(price / 1000);
  	
  	if(price &gt; 0) result = "."+fillDigits(group, 3)+result;
  	else result = group+result;
  }
  
  return (result);

function fillDigits(number, digits){
var res = number;
for(var i=0; i<digits; i++){
var x = Math.pow(10, i);
if(x == 1) x = 0;
if(number < x) res = “0”+res;
}
return res;
}

function extractId(html){
var pc_conf_id = null;

  var prefix = "&lt;!-- hi_pc_configuration_";
  var suffix = " --&gt;";
  var spos = html.indexOf(prefix);
  var epos = html.indexOf(suffix);
  
  //if string contains id
  if(spos != -1 && epos != -1 && spos &lt; epos){
  	pc_conf_id = html.substring(spos + prefix.length, epos);
  }
  return pc_conf_id;

}

[B]function refreshProductPrice(){
var ids = ;
var newPrice = productPrice;
$(“.selectorLabel span”).each(function(){
var id = (extractId($(this).html()));

  	if(id != null){
  		
  		if($.inArray(id, ids) == -1){
  			if(typeof prices[id] === "undefined"){
  				$.ajax({url: "?cl=hi_pc_configuration_ajax&id="+id, dataType: "json", async:false, success:function(data){
  					prices[id] = data['price'] * (1+data['vat']/100);
  				} });
  			}
  			if(prices[id]){
  				newPrice = parseFloat(newPrice) + parseFloat(prices[id]);
  			}
  			ids.push(id);
  		}
  	}
  });
  var newPriceFormatted = (formatPrice(newPrice));
  $("#productPrice span").first().html(newPriceFormatted);

}[/B]

function loadDynamicData(selectedOption){
//extract id from comment

  var html = selectedOption;
  var pc_conf_id = extractId(html);
  
  //if id is available
  if(pc_conf_id != null){
  	
  	$.ajax({url: "?cl=hi_pc_configuration_ajax&id="+pc_conf_id, dataType: "text", 
  	error: function(jqXHR, textStatus, error){alert("ERROR "+error+" ("+textStatus+")");}
  	}).done(function(strData){
  		//alert("AJAX: "+strData);
  		var data = JSON.parse(strData);
  		
  		//alert("XXX"+data);
  		//$("#case").html(data);
  		
  		//remove old p elements
  		$("#"+data["cms_type"]+" &gt; p").remove();
  		
  		//create a single new one
  		$("#"+data["cms_type"]).append("&lt;p&gt;&lt;/p&gt;");
  		
  		//insert into p element
  		$("#"+data["cms_type"]+" &gt; p").html(data['html']);
  	
  		
  		//alert(data['image']);
  		//alert(data['detail']);
  		//alert(data['icon']);
  		
  		if(data['icon']==null){
  			data['icon'] = defaultIcon;
  		}
  		if(data['image'] == null){
  			data['image'] = defaultImage;
  		}
  		if(data['detail'] == null){
  			data['detail'] = defaultDetail;
  		}
  		
  		$("#morePicsContainer &gt; ul &gt; li:first &gt; a &gt; span.artIcon &gt; img").attr("src", data["icon"]);
  		$("#morePicsContainer &gt; ul &gt; li:first &gt; a").attr("rel", "useZoom: 'zoom1', smallImage: '"+data["detail"]+"'");
  		$("#morePicsContainer &gt; ul &gt; li:first &gt; a").attr("href", data["image"]);
  		$("#morePicsContainer &gt; ul &gt; li:first &gt; a").click(
  			function(){
  				$("#wrap &gt; a &gt; img").attr("src", data['detail']);
  			}
  		).click();
  		
  		//change zoom image (zoom button)
  		$(".zoomed &gt; img").attr("src", data["image"]);
  		prices[pc_conf_id] = data['price'] * (1+data['vat']/100);
  		
  		//Change shortdesc
  		if(data["shortdesc"] != null && data['shortdesc'] != ""){
  			//alert(data["cms_type"] + " "+data["shortdesc"]+" "+shortdescNumbers[data["cms_type"]]);
  			
  			var shortdescNumber = shortdescNumbers[data["main_type"]];
  			$(".shortdesc_"+shortdescNumber).html(data["shortdesc"]);
  		}
  		
  		
  		
  	});
  	
  }
  //refreshProductPrice();

}
});

}

Hat vielleicht noch jemand einen Lösungsvorschlag?

ist bei dem ajax-request der cache abgeschaltet?

Das seltsame ist, dass es in der lokalen Testumgebung normal klappt. Wäre der Cache abgeschaltet, würde es ja auch nicht einmal gehen oder?

vielleicht holt der ajax-request beim zweiten Aufruf ja die Daten aus dem cache :confused:

schreib doch einfach mal in den request:


cache: false

Konnten das Problem lösen.

Falls es jemanden interessiert (Lösung bezieht gehört beim fett gerdruckten Text ersetzt):

for(var i=0; i<selections.length; i++){
var id = selections[i];
if($.inArray(id, ids) == -1){
if(typeof prices[id] === “undefined”){
$.ajax({url: “?cl=hi_pc_configuration_ajax&id=”+id, dataType: “json”, async:false, success:function(data){
prices[id] = data[‘price’] * (1+data[‘vat’]/100);
} });
}
if(prices[id]){
newPrice = parseFloat(newPrice) + parseFloat(prices[id]);
}
ids.push(id);
}
}

  var newPriceFormatted = (formatPrice(newPrice));
  $("#productPrice span").first().html(newPriceFormatted);

}