entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Correcta llamada a función + ajax

Estoy tratando de hacer que una llamada de Ajax me devuelva true o false segun unas validaciones. El problema es que la llamada que estoy haciendo es totalmente valida pero por una razon que no recuerdo, no funciona.

Aca el http://jsfiddle.net/3MBNU/2/

y acá la llamada

http://api.soundcloud.com/playlists/11534413.json?client_id=755f8e6cd162151d399938ebcdf1b003

2 Respuestas

1voto

seyacat Puntos170

No creo que de esa forma funcione nunca, ya que el retorno se ejecuta de forma asincronica, caso contrario el script quedaría pegado

debes hacer una funcion de salida, o hacerlo en el mismo return
aquí estoy redundando un poco

http://jsfiddle.net/gAVuZ/

0voto

elias_leyton comentado

Lograste algo? yo aun nada

0voto

seyacat comentado

En el script modificado que te puse esta funcionando

2votos

Leonardo-Tadei Puntos227010

Hola Elías,

lo que te está pasando es que tu función validar_playlist () no devuelve nada, ya que el código de bloque de la llamada AJAX vía JQuery no es accesible para el cuerpo principal de la función, y entonces la función no está devolviendo nada.

Pordías solucionarlo creando una variable en el cuerpo de la función, y que a su vez la función AJAX asigne valor a esta variable. Luego la función devolverá este valor:

function validar_playlist (url) {
        var res = false; // variable para la salida
        // var key = '755f8e6cd162151d399938ebcdf1b003';
        // var set_url = 'https://soundcloud.com/mantarrayachile/sets/costa-esqueleto-2013';

        $.ajax({
            async: false,
            url: 'http://api.soundcloud.com/resolve.json',
            data: {
                'url': url, 
                'client_id': '755f8e6cd162151d399938ebcdf1b003'
            },
            success: function (data) {
                if (data.kind == 'playlist') {
                    res = true;
                } else {
                    res = false;
                }
            },
            error: function () {
                res = false;
            }
        });

        return res;
    }

    if (validar_playlist('https://soundcloud.com/mantarrayachile/sets/costa-esqueleto-2013')) {
        alert("ES UN PLAYLIST VALIDO");
    } else {
        alert("error");
    }

Así sí funciona.

Podría simplificarse además el código usando el valor de default de la variable en el cuerpo de la función:

function validar_playlist (url) {
        var res = false; // variable para la salida
        // var key = '755f8e6cd162151d399938ebcdf1b003';
        // var set_url = 'https://soundcloud.com/mantarrayachile/sets/costa-esqueleto-2013';

        $.ajax({
            async: false,
            url: 'http://api.soundcloud.com/resolve.json',
            data: {
                'url': url, 
                'client_id': '755f8e6cd162151d399938ebcdf1b003'
            },
            success: function (data) {
                if (data.kind == 'playlist') {
                    res = true;
                }
            },
        });

        return res;
    }

    if (validar_playlist('https://soundcloud.com/mantarrayachile/sets/costa-esqueleto-2013')) {
        alert("ES UN PLAYLIST VALIDO");
    } else {
        alert("error");
    }

es decir, cualqueir cosa que no sea success devuelve false.

Saludos!

-1voto

Leonardo-Tadei comentado

Hola Elias,

con el código que estás enviando que incluye parsley.js, obtengo siempre "This value should be a valid url".

A esta altura me parece que debemos cerrar esta pregunta, ya que tu problema era de ámbito de variables en el uso de funciones anónimas para las llamadas AJAX desde JQuery, y el ejemplo que pongo en este post sí funciona, y abras una nueva pregunta sobre validación y parsley.js.

El código posteado al principio se ve funcionando correctamente en http://jsfiddle.net/JAd6t/1/ y dando el mensaje "ES UN PLAYLIST VALIDO".

Saludos Elías.

0voto

elias_leyton comentado

Estimado no funciona, respecto a lo que tu dices This value should be a valid url". parsley esta analizando que el campo sea una URL valida, no que sea un playlist perteneciente a soundcloud. Es una validacion de sintaxis no mas, nada mas que eso.

Lo que no logro hacer funciona es la funcion en si, de validar_playlist, la he probado, bajado, consultado con otras personas y solo entrega, "error".

Captura

0voto

Leonardo-Tadei comentado

Hola Elias,

te envío dos capturas de pantalla que lo muestran funcionando.
La primera es al ir al URL directamente: el mensaje de que es un PLAYLIST válido se ve antes que el código.

http://noticias.pegasusnet.com.ar/imagenes/EliasSC01.jpg
enter image description here

La segunda es al presionar RUN, para que se vea el código. En ambos casos se puede ver el URL.

http://noticias.pegasusnet.com.ar/imagenes/EliasSC02.jpg
enter image description here

Mi consola de depurado no muestra ningún error ni advertencia... Salvo que sea un problema local (caché de tu navegador, etc) no sabría por qué no te funciona una vez corregido el problema de ámbito de variables de tu código original.

Saludos cordiales

0voto

elias_leyton comentado

La pregunta del millon es por que funciona en firefox y no en chrome.

Saludos

1voto

Leonardo-Tadei comentado

Hola Elías,

por favor, hacé la pregunta "por qué este código funciona en Firefox y no funciona en Chrome.." para ver esta cuestión.

Me parece que el tema de la función JS y el problema de ámbito que tiene este tema ya está resuelto y por lo que parece hay una cuestión nueva que no tiene relación con el código.

Saludos cordiales!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta