Petición Ajax con clases javascript

Iniciado por adryprog, 7 Septiembre 2017, 12:54 PM

0 Miembros y 1 Visitante están viendo este tema.

adryprog

Saludos a todos/as.

Tengo un .js donde al pulsar un botón llamo a una función (peticion) para hacer una instancia de una clase(peti) con la que voy a hacer la petición ajax al servidor.

Con el objeto/instancia creado (p), llamo al método(hacer_peti) para que haga la petición al servidor y me devuelva la respuesta (funtion respuesta).

El problema que tengo es que al hacer return dentro de respuesta, no consigo devolver a la instancia creada en un principio ese valor.

He probado a intentar hacerlo con variable global y tampoco me sale.

Os dejo por aquí el código de "miapp.js" donde creo la instancia:

Citar
$(function(){
   
   $("#bt_peti").click(peticion);

});

function peticion() {
   
   var p = new peti();

   alert(p.hacer_peti());

}

Y por aquí el código de "clases.js" donde tengo la clase peti:

Citar// PETICIONES AJAX
function peti() {

   this.hacer_peti = function() {

      $obj = {
         nombre: "pepito"
      };

      $.ajax({
         url: "peticion.php",
         type: "POST",
         data: JSON.stringify($obj),
         datatype: "json",
         success: respuesta,
         error: error
      });

      function respuesta(d) {
         return(d);
      }

      function error(e) {
         alert("Error: " + JSON.stringify(e));
      }
   }

}

LLevo rato intentando solucionarlo y creo que al hacer return dentro de function respuesta, no devuelve ese dato a la instancia creada de miapp.js sino que lo devolverá al success de la petición $.ajax. Ojalá puedan ayudarme, no se muy bien qué hacer para solucionarlo.

Un saludo y muchas gracias de antemano.

adryprog

Ya lo he resuelto, por si alguien lo necesita:

Lo único que me faltaba era poner dentro de $.ajax ->  async: false.

Si se hace sin añadir eso, se hace de forma asíncrona y siempre devuelve un valor indefinido.