none
¿Error al enviar datos con jquery y webmethod? RRS feed

  • Pregunta

  • Saludos Expertos Programadores...

    El problema que tengo es en el envio de datos a sql server con JQuery y un WebMethod...

    Tengo 2 funciones CargaDroopProveedor() y EnviaDatosProveedor()  la primera que jala datos de la BBDD para llenar un dropdown y la segunda que envia datos recogidos de cajas de texto a la base de datos ambos mediante webmethods el problema es que en el evento click del boton "Guardar" coloco la funcion guardar y luego la cargar las cuales funciona bien la 1ra vez, pero al enviar a un nuevo proveedor este lo envia 2 veces, luego 4, luego 8, luego 16 y no se porque? les dejo el codigo que tengo:

    function CargaDroopProveedor() {
        $.ajax({
            type: "POST",
            url: "Default.aspx/CargaProveedor",
            data: {},
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: false,
            success: CargaDrop,
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                alert(textStatus + ": " + XMLHttpRequest.responseText);
            }
        });
        function CargaDrop(result) {

            $("#<%=DropProveedores.ClientID%>").append($("<option></option>").attr("value", "0").text("Seleccione Proveedor"))
            $.each(result.d, function() {
                $("#<%=DropProveedores.ClientID%>").append($("<option></option>").attr("value", this.IdProveedor).text(this.Nombreproveedor))
            });

        }

    function EnviaDatosProveedor() {

            var Datos = new Object();
            Datos.Nombre = $("#<%=TxtNombreProveedor.ClientID%>").val();
            Datos.Direccion = $("#<%=TxtDireccionProveedor.ClientID%>").val();
            Datos.Telefono = $("#<%=TxtTelefonoProveedor.ClientID%>").val();
            Datos= JSON.stringify(Datos);
            $.ajax({
                type: "POST",
                url: "Default.aspx/EnviaProveedor",
                data: Datos,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                async: false,
                success: {},
                error: function(XMLHttpRequest, textStatus, errorThrown) {
                    alert(textStatus + ": " + XMLHttpRequest.responseText);
                }
            });
        }

    y en el boton guardar:

    $("#BtnGuardar").click(function() {

    EnviaDatosProveedor();
    CargaDroopProveedor();

    alert("Datos Enviados");

    });

    la 1ra vez funciona bien, envia los datos y muestra al alert, pero si presiono nuevamente el boton ya me muestra 2 veces el alert luego 4, 8 , 16... y envia la misma cantidad de datos a la BBDD..

    A que se debe este error??...De antemano muchas gracias por la ayuda..

    a y otro dato es que si en el evento click del BtnGaurdar solo llamo a la funcion EnviaDatosProveedor(); y el Alert Funciona bien. solo envia una vez, pero al poner uno luego el otro , ocurre el envio multiple.
    • Editado ivankikes martes, 7 de junio de 2011 16:58
    martes, 7 de junio de 2011 16:51

Respuestas

  • la funcion

    EnviaDatosProveedor()

    de javascript de dodne la lanzas ?

    usas algun evento click de jquery para asignar el evento ?

    si es asi has validado que no se invoque esa asignacion del click en mas de una oportunidad, porque recuerda que el usar

    $('control').click(function(){ ...

    });

     

    se adjunta como los handler de c#, o sea si pasas varias veces por ese codigo se adiciona varias veces esa accion

     

     


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta ivankikes martes, 7 de junio de 2011 20:09
    martes, 7 de junio de 2011 18:55

Todas las respuestas

  • como has definido los webmethods ?

    lo pregunto porque quizas no es que se envian repetidos, sino que el webmethod conserva la operacion anterior

    esto puediera pasar si usas variable definidad con static

    valida que no lo este haciendo

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 7 de junio de 2011 16:57
  • Hola

    Pregunta: ¿pero se esta guardando en BD esta info repoetida? tienes forma de comprobarlo...

    por ahi se esta quedando pegado el combo con la info de la consulta anterior, para esto deberias remover todos los items del combo ya sea con jQuery o desde el webMethod.

    Saludos.


    Nicolás Herrera
    Bogotá - Colombia
    BLOG - Leader Group BogotaDotNet
    "Daría todo lo que sé, por la mitad de lo que ignoro." Rene Descartes
    martes, 7 de junio de 2011 17:21
  • El codigo del Method es simple...

    con este ingreso datos a la BBDD

    [WebMethod]
        public static void EnviaProveedor(string Nombre, string Direccion, string Telefono)
        {
           
            CnxBase BaseD = new CnxBase();
            DataSet Dset = new DataSet();

            consulta = "INSERT INTO Proveedor(Nombre, Direccion, Telefono) VALUES ('"+ Nombre +"','"+Direccion+"', "+Telefono+")";
            SqlHelper.ExecuteNonQuery(BaseD.cnxString, CommandType.Text, consulta);
          
        }

    y este es el que carga el dropdownlist...

    [WebMethod]
        public static List<ListaDatos> CargaProveedor()
        {
            CnxBase BaseD = new CnxBase();
            DataSet Dset = new DataSet();

            string consulta = "SELECT ID_Proveedor, Nombre FROM Proveedor";
            Dset = SqlHelper.ExecuteDataset(BaseD.cnxString, CommandType.Text, consulta);
                      
            List<ListaDatos> Lista = (from Campo in Dset.Tables[0].AsEnumerable()
                                select new Item()
                                {
                                    IdProveedor = Campo .Field<int>("ID_Proveedor"),
                                    Nombre = Campo .Field<string>("Nombre"),
                                }).ToList();
            return Lista;
        }

    Lendro Muchas gracias por responder...

    Crees que el problema este en el WEBMETHOD?? lo pregunto porque el alert que puse en el evento click se repite la misma cantidad de veces, es como si hiciera la 1ra vez 1 click, luego 2clicks, luego 4 clicks luego 8.... y asi aunk yo solo hago uno.


    martes, 7 de junio de 2011 18:35
  • Gracias Nicolas, .

    Te comento:

    Si se envian los datos repetidos a la BBDD ya que los comprove ...Ademas que tengo una funcion para borrar los datos del combo para luego cargarlos con la funcion CargaDroopProveedor(),  tambien pense que era eso pero como te comento tambien es en la base de datos donde se cargan repetidamente los datos...Como puedo solucionar esto??

    Nuevamente gracias.


    martes, 7 de junio de 2011 18:43
  • la funcion

    EnviaDatosProveedor()

    de javascript de dodne la lanzas ?

    usas algun evento click de jquery para asignar el evento ?

    si es asi has validado que no se invoque esa asignacion del click en mas de una oportunidad, porque recuerda que el usar

    $('control').click(function(){ ...

    });

     

    se adjunta como los handler de c#, o sea si pasas varias veces por ese codigo se adiciona varias veces esa accion

     

     


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta ivankikes martes, 7 de junio de 2011 20:09
    martes, 7 de junio de 2011 18:55
  • Leandro:

    Justamente llamo ambas funciones en el evento click de un control

    $("#BtnGuardar").click(function() {

    EnviaDatosProveedor();
    CargaDroopProveedor();

    alert("Datos Enviados");

    });

    y lo curioso es que cuando solo llamo la funcion EnviaDatosProveedor(); y el alert("Datos Enviados");

    $("#BtnGuardar").click(function() {

    EnviaDatosProveedor();
     

    alert("Datos Enviados");

    });     //Funciona correctamente

    Como puedo validarlo para que solo se ejecute una vez??


    martes, 7 de junio de 2011 19:01
  • Lo solucione, Gracias Leandro:

    El problema estaba en que se inbocaba mas de una vez el evento y lo valide para que solo sea una vez.

    martes, 7 de junio de 2011 20:08