none
Consumir Web Service con jQuery en ASP CLASSIC RRS feed

  • Pregunta

  • Alguien tendra algun ejemplo de como consumir un Web Service(VS 2005 C#) usando jQuery en una pagina asp clasico?

    Tengo este codigo pero hasta el momento no he podido hacerlo funcionar.

    <script type="text/javascript">
        $(document).ready(function() {
            $('#btn_aceptar').click(function(event) {
                try {
                    $.ajax({
                        type: 'POST',
                        url: 'http://localhost/WS_Prueba/Service1.asmx/regresaUsuario',
                        data: "{'nombre': '" + $('#txt_CC').val() + "'}",
                        contentType: 'application/json; charset=utf-8',
                        dataType: 'json',
                        succes: function(data) {

                            AjaxOK(data);
                        },
                        error: AjaxError
                    });
                }
                catch (err) {
                    alert(err);
                }
            });
        });
        function AjaxOK(result) {
            alert(result.d);
        }
        function AjaxError(result) {
            alert("ERROR " + result.status + ' ' + result.toString());
        }

    </script>

    Saludos!!


    Si crees que la educación es cara, prueba con la ignorancia

    viernes, 20 de abril de 2012 16:39

Respuestas

  • Tendrías que poner el WebMethod tal cual 

    public Usuario regresaUsuario(String id)
    {
    }

    Es el servicio quien se encarga de pasar el objecto Usuario a JSON. Tu no debes hacer nada, o por lo menos eso creo...


    Atentamente, Sergio.

    Blog
    Twitter

    • Marcado como respuesta Angel Uc martes, 24 de abril de 2012 17:59
    martes, 24 de abril de 2012 17:10

Todas las respuestas

  • una consulta el servicio esta junto al pagina que desarrollas ? porque quizas puedas usar

      url: 'WS_Prueba/Service1.asmx/regresaUsuario',

    cuando dices que no lo has podido hacer funcionar, a que se debe ?

    tienes un error en javascript, si es asi que dide el mensaje, has recordfado agregfar las referencias a jquery

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    sábado, 21 de abril de 2012 3:46
  • De echo así lo tenía, las dos aplicaciones  las tengo en el mismo servidor, el web service y la pagina asp, cambie la url a "localhost/WS_Prueba/Service1.asmx/regresaUsuario" por pensar que ahi podria estar el error, pero sigo sin conseguir respuesta, o eso es lo que creo, mis referencias estan justo antes del bloque del javascript, y pues la pagina no me marca ningun error de javascript el unico ensaje que recibo es el de la funcion del error Ajaxerror(result) Eror:500


    Si crees que la educación es cara, prueba con la ignorancia

    lunes, 23 de abril de 2012 15:00
  • Otra prueba que hice me resulto diferente, paso el codigo para veas..

    <script type="text/javascript" src="jquery-1.7.2.js"></script>

    <script type="text/javascript">
        $(document).ready(function() {
            $('#btn_aceptar').click(function() {
                $.get("/WS_Prueba/Service1.asmx", function(data) { $("#Detalle").html(data); });

            });
        });
    </script>

    Ahi si me trae la pagina completa, con los metodos expuestos, pero cuando expecifico el metodo a consultar ya no trae nada... alguna idea? cabe mencionar que el "Detalle" es un div... Saludos


    Si crees que la educación es cara, prueba con la ignorancia

    lunes, 23 de abril de 2012 17:36
  • Hola,

    al hacer un get del asmx estás obteniendo lo que verías en el navegador, que no es otra cosa, que una página html con los métodos a los que puedes invocar. Yo el primer código lo veo correcto, pero haciendo la prueba que te comentó Leandro (quitado localhost).

    <script type="text/javascript">
        $(document).ready(function() {
            $('#btn_aceptar').click(function(event) {
                try {
                    $.ajax({
                        type: 'POST',
                        url: 'WS_Prueba/Service1.asmx/regresaUsuario',
                        data: "{'nombre': '" + $('#txt_CC').val() + "'}", 
                        contentType: 'application/json; charset=utf-8',
                        dataType: 'json',
                        succes: function(data) {
    
                            AjaxOK(data);
                        },
                        error: AjaxError
                    });
                }
                catch (err) {
                    alert(err);
                }
            });
        });
        function AjaxOK(result) {
            alert(result.d);
        }
        function AjaxError(result) {
            alert("ERROR " + result.status + ' ' + result.toString());
        }
    
    </script>
    Te en cuenta la limitación que imponen los navegadores por seguridad para evitar el cross-site scripting. O sea, si tu página está en http://localhost:puerto no podrás llamar (por lo menos de manera directa) a tu servicio web que está en http://localhost/miservicioweb.


    Atentamente, Sergio.

    Blog
    Twitter

    martes, 24 de abril de 2012 7:29
  • Usando un poco de las herramientas, el mensaje que obtengo por medio del alert es "ERROR 500" y con la respuesta del post el firebug dice lo siguiente:

    System.InvalidOperationException: El formato de solicitud no es válido: application/json; charset=utf-8.
       en System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
       en System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()

    en teoria deberia funcionar tal cual es.


    Si crees que la educación es cara, prueba con la ignorancia

    martes, 24 de abril de 2012 16:18
  • Prueba a decorar el método regresa usario con [ScriptMethod(ResponseFormat = ResponseFormat.Json)]. Algo así

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public Usuario regresaUsuario(string id) 
    {
    }


    Atentamente, Sergio.

    Blog
    Twitter

    martes, 24 de abril de 2012 16:33
  • Maquillado de esa manera el metodo HelloWorld que trae por default el asmx, si completa la llamada, me trae el resultado correcto, pero para mi metodo que efectivamente es tipo clase Usuario me continua marcando el mismo error.

    Tendria que castearlo a tipo json pare regresarlo de esa manera? osea hacer algo asi:

    public json regresaUsuario(String id)
    {
    }


    Si crees que la educación es cara, prueba con la ignorancia

    martes, 24 de abril de 2012 17:08
  • Tendrías que poner el WebMethod tal cual 

    public Usuario regresaUsuario(String id)
    {
    }

    Es el servicio quien se encarga de pasar el objecto Usuario a JSON. Tu no debes hacer nada, o por lo menos eso creo...


    Atentamente, Sergio.

    Blog
    Twitter

    • Marcado como respuesta Angel Uc martes, 24 de abril de 2012 17:59
    martes, 24 de abril de 2012 17:10
  • ya quedo solucionado mi estimado; EL problema o no se si es realmente problema, pero le cambie de succes a complete y si trajo el resultado que se necesita. extrañamente pero ya funciono. Quedo asi:

    <script type="text/javascript">
        $(document).ready(function() {
            $('#btn_aceptar').click(function(event) {
                try {
                    $.ajax({
                        type: 'POST',
                        url: '../../WS_Prueba/Service1.asmx/regresaUsuario',
                        data: "{'nombre': '" + $('#txt_CC').val() + "'}",
                        contentType: 'application/json; charset=utf-8',
                        dataType: 'json',
                        complete: function(data) {
                            AjaxOK(data);
                        },
                        error: function(data) {
                            $("#CustomerDetails").html(data);
                        }
                    });
                }
                catch (err) {
                    alert(err);
                }
            });
        });
        function AjaxOK(result) {
            $("#CustomerDetails").html(result.responseText);
        }
        function AjaxError(result) {
            alert('Error' + ' ' + resul.status);
        }
    </script>
    Muchas gracias por tu apoyo, realmente me guiaste a resolver este problemita.

    Si crees que la educación es cara, prueba con la ignorancia

    martes, 24 de abril de 2012 17:55
  • ¿Y te hizo falta el atributo ScriptMethod en el WebMethod?

    Atentamente, Sergio.

    Blog
    Twitter

    martes, 24 de abril de 2012 18:03
  • Si fue necesario, o por lo menos sin eso no funciona bien

    [WebMethod]        
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public Usuario regresaUsuario(string nombre)
    {    
    }


    Si crees que la educación es cara, prueba con la ignorancia

    martes, 24 de abril de 2012 21:06