Estoy tratando de crear un objeto JavaScript basado en una plantilla que recibí como prueba. Uso Ajax para obtener los datos de mi base de datos, pero parece que no puedo crear el objeto.
$(document).ready(function() { $.ajax({ type: 'POST', url: 'fetch.php', dataType: 'JSON', success: function(response) { var test = JSON.parse(response); var products = {}; for (var x = 0; x < test.length; x++) { products[x] = { productName: test[x]['name'] }; products[x] = { category: test[x]['category'] }; products[x] = { price: test[x]['price'] }; } } }); });Estoy tratando de crear algo como este objeto a continuación
products = {data: [ { productName: "test_item_1", category: "category1", price: "49", image: "test_image.jpg", }, { productName: "test_item_2", category: "category3", price: "99", image: "test_image.jpg", }, { productName: "test_item_3", category: "category3", price: "29", image: "test_image.jpg", },],};Así es como obtengo los datos de mi base de datos.
while($row = mysqli_fetch_assoc($run)){$datas[] = $row;}echo json_encode($datas);Tus líneas con products[x] sobrescriben las anteriores.
Cambiar a
products[x] = { productName: test[x]['name'], category: test[x]['category'], price: test[x]['price'], };Hay un par de problemas primero...
$.ajax() es dataType , no datatypedataType: "json" significa que jQuery analizará automáticamente la respuesta como JSON. No necesitas analizarlo manualmente de nuevo En cuanto a su problema de mapeo, puede mapear la matriz de respuesta a una nueva con el name renombrado a productName usando Array.prototype.map()
$.ajax("fetch.php", { method: "POST", dataType: "json", // data: ¯\_(ツ)_/¯ }).done(data => { const products = { data: data.map(({ name: productName, category, price }) => ({ productName, category, price })) }; });