JavaScript - Funciones javascript ejecución

   
Vista:
Imágen de perfil de Ignacio

Funciones javascript ejecución

Publicado por Ignacio (3 intervenciones) el 28/07/2017 06:32:11
Buenas! la verdad es que soy nuevo en javascript vengo de programar en c++ y hay ciertas cosa que no comprendo como lo siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$(document).ready(function () {
 
    var list = [];
 
    function search ( keyword ) {
      $.ajax('ajax.php', {
          type: 'POST',
          dataType: 'json',
          data: {
              'keyword': keyword
            }
          }).then(function (response) {
                  return response;
              });
    };
 
 
    $('#topSearchText').keyup(function (event) {
        event.preventDefault();
        result = search($('#topSearchText').val());
        console.log(result);
        });
    });

Por algún motivo el console.log devuelve indefinido, la consulta llega perfecto, lo probé con distintos console.log y es más, me llamó mucho la antención en el orden que se fueron mostrando los console.log.. había algunos q salían n ordenes que no deberían, según lo q entiendo. Cualquier ayuda sería muy bn recibida :)..
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Funciones javascript ejecución

Publicado por xve (1912 intervenciones) el 28/07/2017 10:54:43
Hola Ignacio, la instrucción search() creo que es incorrecta... no indicas en que cadena tiene que buscar...
Tendria que ser algo como:
1
resultado="cadena".search("a");

https://www.w3schools.com/jsref/jsref_search.asp
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ignacio

Funciones javascript ejecución

Publicado por Ignacio (3 intervenciones) el 28/07/2017 17:48:38
pero fijate que search es una función que yo programé, no la que viene con string... empieza en la línea 5
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Funciones javascript ejecución

Publicado por xve (1912 intervenciones) el 29/07/2017 09:43:02
Hola Ignacio, perdona, no me di cuenta...
En vez de utilizar .then(), cámbialo por .done()...

then() es llamado cuando el objeto se resuelve, se rechaza o sigue en curso. http://api.jquery.com/deferred.then/
done() es llamado unicamente cuando el objeto se resuelve. http://api.jquery.com/deferred.done/


Revisar la consola para ver que valores se envían y devuelven por ajax.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Vainas

Funciones javascript ejecución

Publicado por Vainas (258 intervenciones) el 29/07/2017 15:05:32
Buenas:

Varias cosas:
1. mirate un poco lo que paso xve y entiende un poco como funcionan las promesas en js.
2. yo para que en algun momento no se mezcle el significado de search o bien lo llamas de otro modo o le pones delante algun prefijo.

Lo que hay que entender aqui es lo siguiente. ajax te va a desvolver el valor con retraso y no al momento como estas esperando. Aunque tu haces:

1
2
then(function (response) {
                  return response;

Ese return no es el return de search como imaginas. Eso se ejecuta cuando el ajax responde con los datos y se ejecuta esa funcion. Como hacemos para obtener ese valor? hay que regresar la promesa ajax y luego encadenar otro then de este modo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$(document).ready(function () {
 
    var list = [];
 
    function _search ( keyword ) {
      return $.ajax('ajax.php', {
          type: 'POST',
          dataType: 'json',
          data: {
              'keyword': keyword
            }
          }).then(function (response) {
                  return response;
              });
    };
 
 
    $('#topSearchText').keyup(function (event) {
        event.preventDefault();
        _search($('#topSearchText').val()).then(function(result){
            console.log(result);
        });
    });
});

No lo he probado pero seguro que funciona. Te marco los cambios para que se entienda. No es mi mejor explicacion.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
Imágen de perfil de Ignacio

Funciones javascript ejecución

Publicado por Ignacio (3 intervenciones) el 31/07/2017 08:30:42
Gracias por sus respuestas!!! me vino bárbaro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar