const submit = e => { e.preventDefault(); fetch('', { method: 'POST', body: JSON.stringify({ product_option_id: 1, quantity: 2, }), }) .then(response => response.json()) .then(result => { if (result.success) { goToCart(); } else { alert('error'); } }); };Tengo una pregunta sobre el envío de datos al backend usando fetch. Tengo product_option_id en formato de matriz como resultado = [4, 3], por ejemplo. Y tengo cantidad en formato de matriz como recuento = [1, 2], por ejemplo, en consecuencia. Así que aquí tengo product_option_id: 4 y su cantidad es 1 y también tengo product_option_id: 3 y su cantidad es 2. Si tengo que enviar estos datos por separado uno tras otro como se indicó anteriormente en lugar de enviar una matriz, ¿puedo escribir una declaración if? así en el cuerpo?
fetch('', { method: 'POST', body: JSON.stringify({ for (let i =0; i < result.length; i++) { product_option_id: result[i], quantity: count[i], } }), })Gracias de antemano.
En primer lugar, una descripción general de su objetivo. Tiene las siguientes estructuras de datos:
const result = [6, 7, 8]; const count = [1, 2, 3];... y desea enviarlos al servidor como una matriz de objetos como:
[ { "product_option_id": 6, "quantity": 1 }, { "product_option_id": 7, "quantity": 2 }, { "product_option_id": 8, "quantity": 3 } ] Para hacer esto, estás en las líneas correctas, pero no puedes usar un bucle for dentro de otra línea. Intente reemplazar su 'for' con una llamada a Array.map() de la siguiente manera:
function transform(result, count) { return result.map((r, index) => ({ product_option_id: r, quantity: count[index] || 0 }); } const submit = e => { e.preventDefault(); fetch('', { method: 'POST', body: JSON.stringify(transform(result, count)), }) .then(response => response.json()) .then(result => { if (result.success) { goToCart(); } else { alert('error'); } }); };Refactoricé su código en funciones más pequeñas para que sea más fácil de leer en beneficio de cualquiera que lea esto, pero podría llamar a result.map en línea dentro de su función original.