Para ampliar lo que señaló @Logan Wayne...
Entonces, en su JavaScript, cuando obtiene referencias a los elementos de datos de su tabla, siempre obtendrá la PRIMERA instancia de un objeto Documento con cualquier ID que proporcione.
// 2. Define what to do when XHR feed you the response from the server - Start
var product = document.getElementById("product").value; <-- will always return the same element
var pp1 = document.getElementById("pp1").value; <-- will always return the same element
var rp1 = document.getElementById("rp1").value; <-- will always return the same element
var stacking = document.getElementById("stacking").value; <-- will always return the same element
Tendrá que asignar identificadores únicos a sus objetos td o, nuevamente, como mencionó @Logan Wayne, utilizar la propiedad de clase de los objetos HTML DOM.
Las clases se pueden utilizar para agrupar elementos similares. Después de asignar nombres de clase a las diferentes columnas de su tabla (Producto , Precio promocional , Precio normal , Apilamiento ) puede usar getElementsByClassName() para obtener una matriz de los elementos td.
...
var products = document.getElementsByClassName("product"); <-- array of product td elements
...