Tengo un proyecto alojado en heroku, y sweetalert parece que no funciona. Alguien sabe cómo hacer para que después de una promesa se visualice en el navegador un aviso?
Gracias.
Hola Jota Montoyo, ¿podrías poner el código que usas para mostrar la alerta? ¿Usas Promesas de EcmaScript 6/2015? Si es así, verifica con algún console.log('Texto') o similar que se esté ejecutando correctamente la misma. Si puedes ponernos el código de la promesa también sería bueno para ayudarte lo mejor posible.
Buenas xingfucoder, sí utilizo promesas y sí funciona correctamente. Pero no consigo que desde el servidor se renderice un panel tipo alerta. La promesa es para grabar un registro en postgres. El registro se graba correctamente, también se envía un correo de confirmación desde un add-on (Postmark) de Heroku. Todo funciona, pero cómo puedo hacer para que se visualice un aviso en pantalla de que el formulario ha sido enviado?
var postmark = require("postmark")(process.env.POSTMARK_API_TOKEN);
postmark.sendEmailWithTemplate({
"From": "contacto@inbarasset.es",
"To": contacto.email,
"TemplateId": 772821,
"TemplateModel": {
"product_name": "Inbar Asset",
"name": contacto.nombre,
"sender_name": "sender_name_Value",
"product_address_line1": "Teléfono +34 601 23 79 19",
"product_address_line2": "contacto@inbarasset.es"
}
}, function(error, success) {
if (error) {
console.error("Unable to send via postmark: " + error.message);
return;
}
console.info("Sent to postmark for delivery with template");
});
// AQUI PODRIA IR ALGUNA ALERTA SOBRE LA QUE PUEDA CAMBIAR SU CLASE
// PERO NO LO CONSIGO DESDE EL LADO SERVIDOR
// PODRIA SER ALGO ASÍ:
// var alerta = req.body.alerta;
// alerta.removeClass('hidden');
// PERO NO ME DEJA APLICAR EL METODO removeClass() PORQUE NO
// RECONOCE EL OBJETO alerta Y POR CONSOLA SALE MENSAJE
// Cannot read property 'removeClass' of undefined
Hola Jota, el tema está en cómo mostrarías la alerta y si trabajas o no con sistema de templates o no, o si usas algún framework externo tipo AngularJS, AngularIO 2 o simplemente con Express. Si es con express podrías mandar una variable a la vista desde el método .then() de la promesa. Posteriormente según el valor que tenga esa variable en tu template o vista podrías usarla para mostrar o no el mensaje de alerta.
Otra cuestión, ¿en local te muestra la alerta, y sólo falla en Heroku, o falla en ambos?
Échale un vistazo a este artículo: https://derickbailey.com/2015/08/20/managing-modal-dialogs-in-browsers-with-promises/
Quizás ahí la mejor opción sea combinándolo con funciones generadoras. De todos modos lo que comentas de que enviado sólo se crea cuando hay un then() es normal porque sólo la tendrás cuando se haya resuelto la Promesa, supongo que es ahí cuando quieres mostrar el modal, ¿no? Supongo que ese modal lo que mostrará es "Se ha creado el usuario correctamente" o algún mensaje similar. Simplemente podrías tener el modal oculto y activarlo a través de JavaScript en el then() llamando al método show() o que corresponda según el tipo de modal o framework CSS+JS que uses.
Buenas buenas, al final lo he resuelto con sweetalert y jQuery de la forma más sencilla:
$('#formulario_contacto').submit(function() {
swal({title: "Tu solicitud ha sido enviada con exito!", text: "Gracias por contactar con nosotros!", timer: 3000, showConfirmButton: false });
event.preventDefault();
});
Muchas gracias por tus aportes. Esto es lo último que me quedaba por terminar una web, así que gracias de nuevo.
Gracias.
31/07/2016 10:19
31/07/2016 10:56
Este es el código:
.save({fields: ["nombre", "alias", "email", "emailok", "telefono", "marca", "ciudad", "provincia", "comentario", "lopd", "revisado"]})
.then(function() {
var postmark = require("postmark")(process.env.POSTMARK_API_TOKEN);
postmark.sendEmailWithTemplate({
"From": "contacto@inbarasset.es",
"To": contacto.email,
"TemplateId": 772821,
"TemplateModel": {
"product_name": "Inbar Asset",
"name": contacto.nombre,
"sender_name": "sender_name_Value",
"product_address_line1": "Teléfono +34 601 23 79 19",
"product_address_line2": "contacto@inbarasset.es"
}
}, function(error, success) {
if (error) {
console.error("Unable to send via postmark: " + error.message);
return;
}
console.info("Sent to postmark for delivery with template");
});
// AQUI PODRIA IR ALGUNA ALERTA SOBRE LA QUE PUEDA CAMBIAR SU CLASE
// PERO NO LO CONSIGO DESDE EL LADO SERVIDOR
// PODRIA SER ALGO ASÍ:
// var alerta = req.body.alerta;
// alerta.removeClass('hidden');
// PERO NO ME DEJA APLICAR EL METODO removeClass() PORQUE NO
// RECONOCE EL OBJETO alerta Y POR CONSOLA SALE MENSAJE
// Cannot read property 'removeClass' of undefined
res.redirect('/');
});
Agradezco tu ayuda!
31/07/2016 11:50
Otra cuestión, ¿en local te muestra la alerta, y sólo falla en Heroku, o falla en ambos?
31/07/2016 14:47
res.redirect('/', {
enviado: true
});
Pero ahora no reconoce la variable 'enviado' en el html:
Normal porque solo se crea 'enviado' cuando hay un .then(), y al renderizar la vista por primera vez el .then() no se ha ejecutado.
No cómo solucionarlo. Te agradezco la ayuda.
Saludos.
31/07/2016 18:29
Échale un vistazo a este artículo: https://derickbailey.com/2015/08/20/managing-modal-dialogs-in-browsers-with-promises/
Quizás ahí la mejor opción sea combinándolo con funciones generadoras. De todos modos lo que comentas de que enviado sólo se crea cuando hay un then() es normal porque sólo la tendrás cuando se haya resuelto la Promesa, supongo que es ahí cuando quieres mostrar el modal, ¿no? Supongo que ese modal lo que mostrará es "Se ha creado el usuario correctamente" o algún mensaje similar. Simplemente podrías tener el modal oculto y activarlo a través de JavaScript en el then() llamando al método show() o que corresponda según el tipo de modal o framework CSS+JS que uses.
31/07/2016 19:45
$('#formulario_contacto').submit(function() {
swal({title: "Tu solicitud ha sido enviada con exito!", text: "Gracias por contactar con nosotros!", timer: 3000, showConfirmButton: false });
event.preventDefault();
});
Muchas gracias por tus aportes. Esto es lo último que me quedaba por terminar una web, así que gracias de nuevo.
Jota