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 Puntos227320

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!

0voto

elias_leyton comentado

No me funciona, creo que el problema adicional es en el servidor hace un redirect, y por eso nunca entra al success. Te das cuenta de eso cuando pinchas la llamada.

0voto

Leonardo-Tadei comentado

La estoy ejecutando en este momento y sí funciona:

http://jsfiddle.net/JAd6t/1/

0voto

elias_leyton comentado

Creo que tienes que dar update a el jsfiddle por que yo veo el mismo codigo que publique.

0voto

Leonardo-Tadei comentado

Sí, era eso: faltaba darle al update

0voto

elias_leyton comentado

mmm, yo entro y me entrega un error inmediatamente.

0voto

Leonardo-Tadei comentado

Qué raro! a mi me aparece el alert con ES UN PLAYLIST VALIDO.

Probaste luego de cargar apretar RUN ???

(le desconfío al orden de carga de jsfiddle.

0voto

elias_leyton comentado

si y lo probe bajandolo tambien, yo creo que es el tema de la redireccion interna del servidor
de
http://api.soundcloud.com/resolve.json?url=http://soundcloud.com/mantarrayachile/sets/costa-esqueleto-2013&client_id=755f8e6cd162151d399938ebcdf1b003

a

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

Al modificarlo así me resulta como tu dices, pero el tema es que no puedo hacer esa llamada.

http://jsfiddle.net/JAd6t/3/

0voto

Leonardo-Tadei comentado

Me parece que hay algo que no entiendo (porque el código que te doy resuelve el problema técnico que tenías y funciona pero no te está sirviendo): podrías poner en http://jsfiddle.net cómo sería la llamada exacta que debe ejecutar el JavaScript ?

0voto

elias_leyton comentado

El codigo final que estoy tratando de hacer es esto

http://jsfiddle.net/JAd6t/4/

Estoy ocupando la libreria parsley.js que permite agregar una función personalizada para la validación de campos, http://parsleyjs.org/documentation.html

0voto

Leonardo-Tadei comentado

Hola Eliás,

no conozco SondCloud: me podrías dar 2 o 3 valores para poner en el input de tipo text y poder probar el código?

0voto

elias_leyton comentado

Soundcloud es una plataforma de musica donde artistas suben sus canciones, albumes, estos ultimos son creados en un formato SET algo asi como PLAYLIST, listas de musica.

Te dare algunos valores validos para el input

  1. https://soundcloud.com/tycho/sets/tychomusic-com
  2. https://soundcloud.com/mantarrayachile/sets/costa-esqueleto-2013
  3. https://soundcloud.com/mkrni/sets/playa-futuro

https://soundcloud.com/mkrni/sets ahi hay varios sets tambien que puedes ocupar

Gracias por el tiempo!

-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