Hola @silviaadmin y @mateomoda,
@silviaadmin, el problema que describes es un clásico con las respuestas AJAX en PrestaShop, especialmente cuando no se valida correctamente la estructura JSON antes de enviarla. Como bien señala @mateomoda, ajaxDie() simplemente termina la ejecución y envía la cadena que le pasas. Si esa cadena no es un JSON válido, el navegador no podrá procesarla.
El problema ocurre porque la cadena del mensaje de error dentro del json_encode se está construyendo de forma incompleta o incorrecta, lo que rompe la estructura JSON final. La solución es asegurarse de que el array que pasamos a json_encode esté siempre bien formado, y que todos los valores sean cadenas de texto correctamente escapadas.
Aquí te muestro cómo debería estar implementado el bloque if para asegurar una respuesta JSON válida:
if (!Validate::isLoadedObject($cart)) {
// Aseguramos que la respuesta JSON sea válida y completa
$this->ajaxDie(json_encode([
'success' => false,
'error' => 'Carrito inválido o no encontrado.'
]));
}
Con esta corrección, te aseguras de que, incluso en el caso de un carrito inválido, la respuesta que recibe el frontend siempre será un JSON bien formado, permitiendo que tu JavaScript lo procese sin errores de sintaxis.
Prueba a aplicar este cambio en tu archivo shipmethodrules/controllers/front/simulate.php y debería resolver el error de parseo.