Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] función retorna undefined

Estas en el tema de función retorna undefined en el foro de Jquery en Foros del Web. Saludos, os comparto el código y os comento dentro del código (ver los comentarios dentro del javascript) @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original var ...
  #1 (permalink)  
Antiguo 16/03/2017, 19:21
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
función retorna undefined

Saludos, os comparto el código y os comento dentro del código (ver los comentarios dentro del javascript)

Código Javascript:
Ver original
  1. var FinalDocument = function () {
  2.     'use strict';
  3.  
  4.     var OrderID = '';
  5.     var hasInvoice = false;
  6.  
  7.     var initReportFinal = function() {
  8.         OrderID = $('#master-order').val();
  9.         var url = '/orders/has-invoice/' + OrderID;
  10.         var url2 = '/documents/final-document/' + OrderID;
  11.         var url3 = '/documents/preview/' + OrderID;
  12.  
  13.         $('body').on('click', '.subgroups.viewFR', function (event) {
  14.              // Aquí me está devolviendo "undefined"
  15.              hasInvoice = checkIfInvoiceExist(url);
  16.  
  17.              if(hasInvoice) {
  18.                  $.ajax({
  19.                      url: url2,
  20.                      beforeSend: function () {
  21.                          $('.ring-label').text('Generating');
  22.                          $('.bottom-ring-label').css('display', 'block');
  23.                      },
  24.                      complete: function () {
  25.                          $('.bottom-ring-label').css('display', 'none');
  26.                      },
  27.                      success: function(data) {
  28.                          window.open(url3, '_blank');
  29.                      }
  30.                  });
  31.              } else
  32.                  swal("There's no any invoice generated, so you cannot generate the final document.", "Lien Application", "warning");
  33.         });
  34.  
  35.         function checkIfInvoiceExist(url) {
  36.             $.ajax({
  37.                 url: url,
  38.                 beforeSend: function () {
  39.                     $('.ring-label').text('Processing');
  40.                     $('.bottom-ring-label').css('display', 'block');
  41.                 },
  42.                 complete: function () {
  43.                     $('.bottom-ring-label').css('display', 'none');
  44.                 },
  45.                 success: function (data) {
  46.                     // Hasta aquí se recibe el resultado de la consulta "true o false"
  47.                     console.info('HasInvoice? ' + data.success);
  48.                     return data.success;
  49.                 }
  50.             });
  51.         }
  52.     }
  53.  
  54.     return {
  55.         init: function () {
  56.             initChecklistBTN();
  57.             initInvoicePreview();
  58.             initReportFinal();
  59.         }
  60.     };
  61.  
  62. }();

He tratado también aunque sea absurdo, sacar fuera del la clase la función checkIfInvoiceExist() pero nada, como era de esperar, el resultado sigue siendo igual.

Me estoy viendo obligado a seguir ejecutando el código dentro de la misma función pero no me interesa pues hay otras funciones que hace uso de la función checkIfInvoiceExist() y dependiendo del resultado hace otras cosas.

Algúna explicación / solución a porqué no me está devolviendo el resultado a la variable cuando sí debería de hacerlo.
  #2 (permalink)  
Antiguo 16/03/2017, 22:17
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: función retorna undefined

Revisa este tema: http://stackoverflow.com/questions/2...le-its-all-goo es el mismo problema.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 17/03/2017, 08:49
 
Fecha de Ingreso: julio-2015
Mensajes: 85
Antigüedad: 8 años, 9 meses
Puntos: 4
Respuesta: función retorna undefined

Es un problema tipico en javascript, retorna undefined debido a que es una funcion que realiza una peticion ajax, que tiene callback que seran ejecutados cuando obtengas la respuesta del servidor pero la funcion a la cual tu realmente estas llamando ya ha acabado su ejecucion cuando el callback retorna.

Para poder conseguir lo que quieres tienes que usar promesas que es6 ya lo da nativo en el propio javascript.

Si nunca te has pegado con la asincronia al principio te sonara a chino.
  #4 (permalink)  
Antiguo 17/03/2017, 10:26
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: función retorna undefined

Gracias tocayo y dardosmania, entre los dos me aclarasteis el tema.

La verdad que cuando estoy con javascript me acuerdo muy poco de la asincronía, me acuerdo de ello cuando he de poner algo en orden pero en este caso ni pensé en ello por el tema de ir pasando valores entre funciones.

Comparto el código de como me quedó después de modificarlo:

Código Javascript:
Ver original
  1. var FinalDocument = function () {
  2.     'use strict';
  3.  
  4.     var OrderID = '';
  5.  
  6.     var initReportFinal = function() {
  7.         OrderID = $('#master-order').val();
  8.         var url = '/orders/has-invoice/' + OrderID;
  9.  
  10.         $('body').on('click', '.subgroups.viewFR', function () {
  11.             checkIfInvoiceExist(url, getGenerateInvoice);
  12.         });
  13.  
  14.         function getGenerateInvoice(value) {
  15.             if(value) {
  16.                 $.ajax({
  17.                     url: '/documents/final-document/' + OrderID,
  18.                     beforeSend: function () {
  19.                         $('.ring-label').text('Generating');
  20.                         $('.bottom-ring-label').css('display', 'block');
  21.                     },
  22.                     complete: function () {
  23.                         $('.bottom-ring-label').css('display', 'none');
  24.                     },
  25.                     success: function(data) {
  26.                         window.open('/documents/preview/' + data, '_blank');
  27.                     }
  28.                 });
  29.             } else
  30.                 swal("There's no any invoice generated, so you cannot generate the final document.", "Lien Application", "warning");
  31.         }
  32.     }
  33.  
  34.     return {
  35.         init: function () {
  36.             initReportFinal();
  37.         }
  38.     };
  39. }();
  40.  
  41. function checkIfInvoiceExist(url, callback) {
  42.     $.ajax({
  43.         url: url,
  44.         beforeSend: function () {
  45.             $('.ring-label').text('Processing');
  46.             $('.bottom-ring-label').css('display', 'block');
  47.         },
  48.         complete: function () {
  49.             $('.bottom-ring-label').css('display', 'none');
  50.         },
  51.         success: function (data) {
  52.             callback(data.success);
  53.         }
  54.     });
  55. }

Etiquetas: funcion, javascript, retorna, text, undefined
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:24.