none
vs.net 2012 web service invocado por html5 json jquery RRS feed

  • Pregunta

  • Hola todos, anteriormente hice una app android usando json para leer y guardar datos por medio de un web services vs2012 hacia mi base de datos SQL Server, ahora estoy intentando por html5 leer un metodo en un web services creado con vb.net 2012, he visto muchos ejemplos pero de momento No me ha funcionado nada y no se que me estará faltando. Si alguién sabe que estoy haciendo mal, les agradecería mucho la ayuda.

    El WS, invocado directo por el browser, si me devuelve los datos. Lo que indica que esta bien creado y accesando bien la base de datos. Creyendo que talvez era algo con los parametros, intente invocando el HelloWorld y tampoco funciona.
    He comentado la parte donde utilizo la funcion que me deberia devolver datos, pues asumo que si me llega a funcionar el HelloWorld, el otro metodo tambien deberia funcionar. 

    He intentadod con el Web Service desde el servidor y desde el mismo proyecto .net.

    Aqui les dejo todo el codigo que estoy utilizando.

    Código del WebServices.
    ----------------------------------------------------------------

    Imports System.Web.Services
    Imports System.Web.Services.Protocols
    Imports System.ComponentModel

    ' Para permitir que se llame a este servicio web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la línea siguiente.
    <System.Web.Script.Services.ScriptService()> _
    <System.Web.Services.WebService(Namespace:="http://localhost/")> _
    <System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
    <ToolboxItem(False)> _
    Public Class WsPrueba
        Inherits System.Web.Services.WebService

        <WebMethod()> _
        Public Function HelloWorld() As String
            Return "Hola a todos"
        End Function

        <WebMethod()> _
        Public Function Productos(Top As Integer) As System.Data.DataSet
            ' Top indica si se limita los registros devueltos
            Dim SQL As String = "select * from Productos "

            If Top <> 0 Then
                SQL = SQL.Replace("*", "Top " & Top & " * ")
            End If

            Dim DS1 As New DataSet
            Dim Llave() As FuncionesDB.Campos

            Dim Cls As New FuncionesDB
            Llave = Cls.InicializarArray

            Try       

                ' Esta funcion abre mi conexion, y ejecuta el SQL indicado
                DS1 = Cls.ConsultarTSQL("Productos", SQL)

                'If DS1.Tables(0).Rows.Count > 0 Then
                Return DS1
                'End If
            Catch ex As Exception
                ' mas adelante pondre el throw new ex
                Return DS1
            End Try
        End Function
    End Class

    ---------------
    Archivo JS con las funciones json jquery

    -------------------

    function OnError(request, status, error)  //Función que se ejecuta si ocurre algún error
    {
        alert(status);
    }
    $(function () {
        //Evita problemas de cross-domain con JQuery
        jQuery.support.cors = true;
    });

    function CargaProductos(MiTop) {
        $('#subcategoria').empty();

        $("#subcategoria").append("<option value='-1'> ** Seleccione Producto ** </option>");
        var myselect = $("#subcategoria");
        myselect[0].selectedIndex = 0;
       // myselect.selectmenu('refresh');

        var llave;
        llave = MiTop; 

        $.ajax({
            type: "POST",
            dataType: "json",
            contentType: "application/json",
            url: "WsPrueba.asmx/HelloWorld",
            //url: "http://192.168.0.7/WsPrueba/WsPrueba.asmx/HelloWorld",
            data: {
                //nbsp;       },
            success: function (data, textStatus, jqXHR) {

                //$('#mensaje').text('enter function');
              
                $('#mensaje').empty().text = "hola el WS ha devuelto datos";
                $(data).find("Productos").each(function () {
              
                    var valor = $(this).find("CodPro").text();
                    var nombre = $(this).find("NomPro").text();
                    $("#subcategoria").append("<option value=" + valor + ">" + nombre + "</option>");

                });
                error: onError

            }
        });

    }


    -------------------

    Codigo del HTML5. Aqui he intentado varias cosas y nada.
    ----------------

     <html>
        <head>
            <title></title>
         
            <script src="Scripts/jquery-1.10.2.js" type="text/javascript"></script>
            <script src="JavaScript1.js"></script>

            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
       
        </head>
        <body>
            <form method="post" action="">
              <div>
            
              <input type="button" value="Jquery" onclick="CargaProductos(10); " />
              </div>

                <select id="subcategoria">
                    <option></option>

                </select>
                <br />
                <div id="mensaje">aqui mensajes</div>

           </form>
        </body>
    </html>



    cesardgo


    • Editado cesardgo martes, 27 de octubre de 2015 14:39
    martes, 27 de octubre de 2015 14:34

Respuestas

  • Acabo de lograr hacer que me funcione, tuve que modificar varias cosas en el codigo original, en resumen el metodo del web service ocupaba un <ScriptMethod(ResponseFormat:=ResponseFormat.Json,       XmlSerializeString:=True)>,, como Jquery en la respuesta Json, me falla al retornar un DataSet, pero si me funciona con un string, tuve que convertir mi dataset en string para devolverlo al HTML. Luego en Jquery el string le hago un ParseXML y luego proceso los datos obtenidos cargando mi tabla de productos en una lista.

    Adjunto el código por si alguien necesita recuperar un dataset y procesarlo por parametros.

    WebService
    ---------------

    Imports System.Web.Services
    Imports System.Web.Services.Protocols
    Imports System.ComponentModel
    Imports System.Data.SqlClient
    Imports System.Web.Script.Services
    Imports System.IO

    ' Para permitir que se llame a este servicio web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la línea siguiente.
    <System.Web.Script.Services.ScriptService()> _
    <System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
    <System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
    <ToolboxItem(False)> _
    Public Class WsPrueba
        Inherits System.Web.Services.WebService

        <WebMethod()> _
        Public Function HelloWorld() As String
            Return "Hola a todos"
        End Function

        <WebMethod()> _
        Public Function Productos() As System.Data.DataSet
            Dim Top As Integer = 15
            ' Top indica si se limita los registros devueltos
            ' DEvuelve toda la tabla 
            Dim SQL As String = "select * from Productos "

            If Top <> 0 Then
                SQL = SQL.Replace("*", "Top " & Top & " * ")
            End If

            Dim DS1 As New DataSet
            Dim Llave() As FuncionesDB.Campos

            Dim Cls As New FuncionesDB
            Llave = Cls.InicializarArray

            Try
                Dim DS As New DataSet

                DS1 = Cls.ConsultarTSQL("Productos", SQL)

                'If DS1.Tables(0).Rows.Count > 0 Then
                Return DS1
                'End If

            Catch ex As Exception
                Return DS1
            End Try

        End Function

        <WebMethod()> _
        <ScriptMethod(ResponseFormat:=ResponseFormat.Json, _
                XmlSerializeString:=True)> _
        Public Function VerProductos(Codigo As String) As String
            Dim Top As Integer = Val(Codigo)
            ' Top indica si se limita los registros devueltos
            ' Revibiendo parametros, ya podemos hacer cualquier filtro en las tablas utilizando el parametro.
            Dim SQL As String = "select * from Productos "

            If Top <> 0 Then
                SQL = SQL.Replace("*", "Top " & Top & " * ")
            End If

            Dim DS1 As New DataSet
            Dim Llave() As FuncionesDB.Campos

            Dim Cls As New FuncionesDB
            Llave = Cls.InicializarArray

            Try
                Dim DS As New DataSet

                DS1 = Cls.ConsultarTSQL("Productos", SQL)

                Dim sb = New StringBuilder()
                Using writer = New StringWriter(sb)
                    DS1.WriteXml(writer)
                    Dim xml As String = sb.ToString()
                    Return xml
                End Using

                'Return DS1
                'Return "Siiiii"
                'End If
            Catch ex As Exception
                'Return DS1
                Return "Error " & ex.Message
            End Try
        End Function

        <WebMethod()> _
    <ScriptMethod(ResponseFormat:=ResponseFormat.Json, _
            XmlSerializeString:=True)> _
        Public Function VerProductosBueno(Codigo As String) As String
            '' esto solo devuelve string en respuesta a llamada jquery json.
            Dim Top As Integer = Val(Codigo)
            ' Top indica si se limita los registros devueltos
            Dim SQL As String = "select * from Productos "

            If Top <> 0 Then
                SQL = SQL.Replace("*", "Top " & Top & " * ")
            End If

            Dim DS1 As New DataSet
            Dim Llave() As FuncionesDB.Campos

            Dim Cls As New FuncionesDB
            Llave = Cls.InicializarArray

            Try
                Dim DS As New DataSet

                DS1 = Cls.ConsultarTSQL("Productos", SQL)

                'If DS1.Tables(0).Rows.Count > 0 Then
                ' Return "Si funciona"
                ' Return DS1
                Return "Siiiii"
                'End If
            Catch ex As Exception
                ' Return ex.Message
                'Return DS1
                Return "Noooo"
            End Try
        End Function
    End Class

    ---------------
    JavaScript para recuperar Datos.
    ---------------

    function CargaProductos(MiTop) {
       // Recupera toda la tabla SIN PARAMETROS EN XML
        $('#subcategoria').empty();

        $("#subcategoria").append("<option value='-1'> ** Seleccione Producto ** </option>");
        var myselect = $("#subcategoria");
        myselect[0].selectedIndex = 0;
       
        var llave;
      
        llave = MiTop; //$('#categoria').val();
        $('#mensaje').text("antes de ajax");
        $.ajax({
            type: "POST",
            dataType: "xml",
            contentType: "application/xml; charset=utf-8",
            //url: "/WsPossic.asmx/HelloWorld",
            url: "WsPrueba.asmx/Productos",       
            data: {
               // Top: llave
            },
            success: function (data, textStatus, jqXHR) {
                         
                $('#mensaje').text("consulta exitosa");
                $(data).find("Productos").each(function () {
                 
                    var valor = $(this).find("CodPro").text();
                    var nombre = $(this).find("NomPro").text();
                    $("#subcategoria").append("<option value=" + valor + ">" + nombre + "</option>");

                });
     },
                error: function(msg) {
                    alert('Error ' + msg);
                }       
        });
    }

    function VerProductos(MiTop) {   
        $('#subcategoria').empty();

        $("#subcategoria").append("<option value='-1'> ** Seleccione Producto ** </option>");
        var myselect = $("#subcategoria");
        myselect[0].selectedIndex = 0;
       
        var parameters = "{'Codigo':'" + MiTop +  "'}";

        $('#mensaje').text("antes de ajax");
        $.ajax({
            type: "POST",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            //url: "/WsPossic.asmx/HelloWorld",
            url: "WsPrueba.asmx/VerProductos", // metodo del webservice
            data: 
              "{'Codigo':'20'}", // ** OJO ** REEMPLAZAR POR parameters
                    
            success: function (data, textStatus, jqXHR) {          
                      
                $('#mensaje').text("Consulta exitosa con Parametros enviados. Json");

                // Ejemplo de lectura XML
                //var xml = "<?xml version=\"1.0\"?><Dialog><Adam Emotion=\"strong\">I love you!</Adam><Eva Emotion=\"low\">I love you, too!</Eva></Dialog>";
                //alert($(xml).find('Adam').text());
                //  alert($(xml).find('Adam').attr('Emotion'));         

                // Data.d trae un string con el XML generado dentro del servicio web asmx
                $(data.d).find("Productos").each(function () {               
                  
                    var valor = $(this).find("CodPro").text();
                    var nombre = $(this).find("NomPro").text();
                    $("#subcategoria").append("<option value=" + valor + ">" + nombre + "</option>");

                });
            },
            error: function (xhr, status, error) {
                alert('Error ' + error);
            }
        });

    }

    ----
    HTML
    -----
    Invocar el metodo mediante : 
     <input type="button" value="No Funciona Parametros" onclick="VerProductos(2); " />


    cesardgo

    • Marcado como respuesta cesardgo jueves, 29 de octubre de 2015 15:25
    jueves, 29 de octubre de 2015 15:24

Todas las respuestas

  • Hola buenas creo que lo que te está ocurriendo es que NO estás serializando los datos correctamente.

    Si te fijas en la declaración que has definido en tu llamada $.ajax() vemos que tenemos 

      dataType: "json",  --> Esto indica que los datos que te va a retornar el servidor están serializados en JSON
      contentType: "application/json", --> Esto indica que los datos que vas a enviar al servidor están serializados en JSON

     al devolver un Dataset éste se serializa a XML. modifica la declaración de $.ajax() así

    dataType: "xml",
    contentType: "application/xml; charset=utf-8",


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 27 de octubre de 2015 15:00
    Moderador
  • hola

    >>invocado directo por el browser, si me devuelve los datos. Lo que indica que esta bien creado y accesando bien la base de datos

    pero si desde el browser funciona, entonces desde donde es que no lo hace ?

    mencioans android, pero es desde dentro del dispositivo que no funciona?

    que tipo de desarrollo realizas es algo con Apache Cordova ? quizas con PhoneGap

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 27 de octubre de 2015 15:06
  • Excelente Muchisimas Gracias, todos los ejemplos que encontraba indicaban usar json, cambiando a xml, ya me sirve la consulta de datos.

    cesardgo

    martes, 27 de octubre de 2015 16:24
  • Gracias por responder, estoy usando IIS 7, el problema era el tipo de dato que debia ser XML, anteriormente usando Intel XDK usaba llamadas json con la misma sintaxis ajax para comunicarme con el web services de vs.net.

    Mi desarrollo es vb.net y html5 con bootstrap.


    cesardgo

    martes, 27 de octubre de 2015 16:26
  • >>todos los ejemplos que encontraba indicaban usar json, cambiando a xml

    y tienes que usas json, no veo porque cambiarlo a xml deberia afectar en algo

    salvo que desde la aplicacion cliente no puedas generar este tipo de datos, cualquier cliente en la actualidad sabe como generar json si es que este es el tipo de formato que quieres usar para el intercambio

    pero sigues sin mencionar desde que cliente invocas al servicio ? ademas existen emuladores que podrias usar para validar si hay algun problema cuando invocas el servicio y depurar como se envian los datos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina



    martes, 27 de octubre de 2015 17:10
  • El servicio lo invoco desde html, usando ya sea google chrome o explorer, el sitio web esta publicado en un IIS 7.0.

    Para depurarlo uso vs.net 2012

    Con json, no me funcionó el recuperar los datos, cambiando a XML si, ahora el unico problema es que me funciona solo si el metodo del web serice es sin parametros, cuando intento invocar un metodo con parametros siempre me retorna error. En el servicio web he cambiado el tipo de dato del parametro a integer, string, etc. 

              

    Y tambien he intentado mandarle los parametros de varias formas:
         var parameters = "{'Codigo':'" + MiValor +  "'}";

         en el data pongo

      data:
                parameters, // esto no funciona.

    con el metodo tradicional de mandar parametros tampoco
     data: {
                Codigo: MiValor.toString()
            },

    tampoco me funciona de esta forma

     data: {
                Codigo: llave
            },

    ------

    El WebService invocado directo desde el browser si me funciona digitando el parametro. Sigo intentando ver porque me funciona sin parametros y No con parametros.

    Gracias por la ayuda.


    cesardgo

    miércoles, 28 de octubre de 2015 14:55
  • Cómo tienes tu código js para llamar al servicio? 

    porque si el ContentType es xml no puedes pasarle un JSON. Prueba a realizar esto en tu codigo

    url: "WsPrueba.asmx/HelloWorld",
    dataType: "xml",
    contentType: "application/json; charset=utf-8",
    data: "{'param1':'PRUEBA', 'param2':'PRUEBA2'}",

    Como ves cambiamos el content type para que se le envíe al servicio los parámetros por JSON.


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    miércoles, 28 de octubre de 2015 15:48
    Moderador
  • Yo cambiaría

    type: "POST",

    por

    type: "GET",

    ya que estás recuperando información del servidor NO estableciendola


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    miércoles, 28 de octubre de 2015 21:00
    Moderador
  • ya lo intente cambiando a POST por GET y tampoco, siempre me muestra Internal Server Error.

    cesardgo

    miércoles, 28 de octubre de 2015 21:04
  • Decora así este metodo

    <WebMethod()> _
    <ScriptMethod(UseHttpGet=True)> _
         Public Function VerProductos(Codigo As String) As System.Data.DataSet
    agrega ScriptMethod y dejalo en GET


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos



    miércoles, 28 de octubre de 2015 21:53
    Moderador
  • Tambirn te recomiendo que en tu llamada ajax en la parte de error sea algo así para mostrar un mensaje mas completo

    error: function (jqXHR, textStatus, errorThrown)  
        {
            alert('Error ' + errorThrown + ", " + jqXHR.responseText + ", " + textStatus);
        },
       


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    miércoles, 28 de octubre de 2015 21:59
    Moderador
  • y en la parte de

    data: De tu llamda ajax haz

    data:  JSON.stringify(parameters),


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    miércoles, 28 de octubre de 2015 22:02
    Moderador
  • anteriormente ya habia probado eso y tampoco.

    he intentado esto : 
     data: //{ Codigo: 4 },
              //"{'Codigo':'20'}",
               // JSON.stringify(MiTop) ,

              JSON.stringify(parameters) ,

    Tambien intercambiando a xml y json incluso en un foro tambien hablaban de jsonp. Siempre laza el error Internnal Server Error.


    cesardgo

    miércoles, 28 de octubre de 2015 22:20
  • Tambirn te recomiendo que en tu llamada ajax en la parte de error sea algo así para mostrar un mensaje mas completo

    error: function (jqXHR, textStatus, errorThrown)  
        {
            alert('Error ' + errorThrown + ", " + jqXHR.responseText + ", " + textStatus);
        },
       


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    probaste esto? Mostrar mas datos en el mensaje de error

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    miércoles, 28 de octubre de 2015 23:12
    Moderador
  • Acabo de lograr hacer que me funcione, tuve que modificar varias cosas en el codigo original, en resumen el metodo del web service ocupaba un <ScriptMethod(ResponseFormat:=ResponseFormat.Json,       XmlSerializeString:=True)>,, como Jquery en la respuesta Json, me falla al retornar un DataSet, pero si me funciona con un string, tuve que convertir mi dataset en string para devolverlo al HTML. Luego en Jquery el string le hago un ParseXML y luego proceso los datos obtenidos cargando mi tabla de productos en una lista.

    Adjunto el código por si alguien necesita recuperar un dataset y procesarlo por parametros.

    WebService
    ---------------

    Imports System.Web.Services
    Imports System.Web.Services.Protocols
    Imports System.ComponentModel
    Imports System.Data.SqlClient
    Imports System.Web.Script.Services
    Imports System.IO

    ' Para permitir que se llame a este servicio web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la línea siguiente.
    <System.Web.Script.Services.ScriptService()> _
    <System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
    <System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
    <ToolboxItem(False)> _
    Public Class WsPrueba
        Inherits System.Web.Services.WebService

        <WebMethod()> _
        Public Function HelloWorld() As String
            Return "Hola a todos"
        End Function

        <WebMethod()> _
        Public Function Productos() As System.Data.DataSet
            Dim Top As Integer = 15
            ' Top indica si se limita los registros devueltos
            ' DEvuelve toda la tabla 
            Dim SQL As String = "select * from Productos "

            If Top <> 0 Then
                SQL = SQL.Replace("*", "Top " & Top & " * ")
            End If

            Dim DS1 As New DataSet
            Dim Llave() As FuncionesDB.Campos

            Dim Cls As New FuncionesDB
            Llave = Cls.InicializarArray

            Try
                Dim DS As New DataSet

                DS1 = Cls.ConsultarTSQL("Productos", SQL)

                'If DS1.Tables(0).Rows.Count > 0 Then
                Return DS1
                'End If

            Catch ex As Exception
                Return DS1
            End Try

        End Function

        <WebMethod()> _
        <ScriptMethod(ResponseFormat:=ResponseFormat.Json, _
                XmlSerializeString:=True)> _
        Public Function VerProductos(Codigo As String) As String
            Dim Top As Integer = Val(Codigo)
            ' Top indica si se limita los registros devueltos
            ' Revibiendo parametros, ya podemos hacer cualquier filtro en las tablas utilizando el parametro.
            Dim SQL As String = "select * from Productos "

            If Top <> 0 Then
                SQL = SQL.Replace("*", "Top " & Top & " * ")
            End If

            Dim DS1 As New DataSet
            Dim Llave() As FuncionesDB.Campos

            Dim Cls As New FuncionesDB
            Llave = Cls.InicializarArray

            Try
                Dim DS As New DataSet

                DS1 = Cls.ConsultarTSQL("Productos", SQL)

                Dim sb = New StringBuilder()
                Using writer = New StringWriter(sb)
                    DS1.WriteXml(writer)
                    Dim xml As String = sb.ToString()
                    Return xml
                End Using

                'Return DS1
                'Return "Siiiii"
                'End If
            Catch ex As Exception
                'Return DS1
                Return "Error " & ex.Message
            End Try
        End Function

        <WebMethod()> _
    <ScriptMethod(ResponseFormat:=ResponseFormat.Json, _
            XmlSerializeString:=True)> _
        Public Function VerProductosBueno(Codigo As String) As String
            '' esto solo devuelve string en respuesta a llamada jquery json.
            Dim Top As Integer = Val(Codigo)
            ' Top indica si se limita los registros devueltos
            Dim SQL As String = "select * from Productos "

            If Top <> 0 Then
                SQL = SQL.Replace("*", "Top " & Top & " * ")
            End If

            Dim DS1 As New DataSet
            Dim Llave() As FuncionesDB.Campos

            Dim Cls As New FuncionesDB
            Llave = Cls.InicializarArray

            Try
                Dim DS As New DataSet

                DS1 = Cls.ConsultarTSQL("Productos", SQL)

                'If DS1.Tables(0).Rows.Count > 0 Then
                ' Return "Si funciona"
                ' Return DS1
                Return "Siiiii"
                'End If
            Catch ex As Exception
                ' Return ex.Message
                'Return DS1
                Return "Noooo"
            End Try
        End Function
    End Class

    ---------------
    JavaScript para recuperar Datos.
    ---------------

    function CargaProductos(MiTop) {
       // Recupera toda la tabla SIN PARAMETROS EN XML
        $('#subcategoria').empty();

        $("#subcategoria").append("<option value='-1'> ** Seleccione Producto ** </option>");
        var myselect = $("#subcategoria");
        myselect[0].selectedIndex = 0;
       
        var llave;
      
        llave = MiTop; //$('#categoria').val();
        $('#mensaje').text("antes de ajax");
        $.ajax({
            type: "POST",
            dataType: "xml",
            contentType: "application/xml; charset=utf-8",
            //url: "/WsPossic.asmx/HelloWorld",
            url: "WsPrueba.asmx/Productos",       
            data: {
               // Top: llave
            },
            success: function (data, textStatus, jqXHR) {
                         
                $('#mensaje').text("consulta exitosa");
                $(data).find("Productos").each(function () {
                 
                    var valor = $(this).find("CodPro").text();
                    var nombre = $(this).find("NomPro").text();
                    $("#subcategoria").append("<option value=" + valor + ">" + nombre + "</option>");

                });
     },
                error: function(msg) {
                    alert('Error ' + msg);
                }       
        });
    }

    function VerProductos(MiTop) {   
        $('#subcategoria').empty();

        $("#subcategoria").append("<option value='-1'> ** Seleccione Producto ** </option>");
        var myselect = $("#subcategoria");
        myselect[0].selectedIndex = 0;
       
        var parameters = "{'Codigo':'" + MiTop +  "'}";

        $('#mensaje').text("antes de ajax");
        $.ajax({
            type: "POST",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            //url: "/WsPossic.asmx/HelloWorld",
            url: "WsPrueba.asmx/VerProductos", // metodo del webservice
            data: 
              "{'Codigo':'20'}", // ** OJO ** REEMPLAZAR POR parameters
                    
            success: function (data, textStatus, jqXHR) {          
                      
                $('#mensaje').text("Consulta exitosa con Parametros enviados. Json");

                // Ejemplo de lectura XML
                //var xml = "<?xml version=\"1.0\"?><Dialog><Adam Emotion=\"strong\">I love you!</Adam><Eva Emotion=\"low\">I love you, too!</Eva></Dialog>";
                //alert($(xml).find('Adam').text());
                //  alert($(xml).find('Adam').attr('Emotion'));         

                // Data.d trae un string con el XML generado dentro del servicio web asmx
                $(data.d).find("Productos").each(function () {               
                  
                    var valor = $(this).find("CodPro").text();
                    var nombre = $(this).find("NomPro").text();
                    $("#subcategoria").append("<option value=" + valor + ">" + nombre + "</option>");

                });
            },
            error: function (xhr, status, error) {
                alert('Error ' + error);
            }
        });

    }

    ----
    HTML
    -----
    Invocar el metodo mediante : 
     <input type="button" value="No Funciona Parametros" onclick="VerProductos(2); " />


    cesardgo

    • Marcado como respuesta cesardgo jueves, 29 de octubre de 2015 15:25
    jueves, 29 de octubre de 2015 15:24