none
Muestra de países con Ajax, webmethod y jQuery RRS feed

  • Pregunta

  • Buenas,

    Actualmente tengo una muestra de listado de países según se escriben sus nombres en un textbox gracias a un "AutoCompleteExtender" de asp.net en vb. Ahora lo que quiero es dominar yo con ajax y con jQuery la trata de datos porque eso me ayudará a otras cosas en el futuro. El caso es que lo intento y me da un error cuando lo intento hacer con un JSON y un webmethod y no se por qué. Os incluyo los códigos a ver si sabemos por qué es.

    B.aspx

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

    <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="B.aspx.vb" Inherits="W_Nones_SSL.B" %>
    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajax" %>

    <!DOCTYPE html>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <asp:ScriptManager ID="ScriptManager1"  EnableScriptGlobalization="true" runat="server" />
                <asp:TextBox ID="RaizEncuentro" runat="server" />

                <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>

                <script>
                    $(function () {
                        $('#RaizEncuentro').keypress(function () {
                            var prefixText = $('#RaizEncuentro').val();
                            var count = 1
                            $.ajax({
                                type: "POST",
                                url: "B.aspx/ObtenerListadoRaiz",
                                data: '{prefixText: ' + prefixText + ', count: ' + count + '}',
                                contentType: "application/json; charset=utf-8",
                                dataType: "json",
                                success: resultado,
                                error: errores
                            });
                        });

                        $('#RaizEncuentro').change(function() {
                            var contenido = $('#RaizEncuentro').val();
                        });
                    });

                    function resultado(msg) {
                        alert('hecho');
                    }

                    function errores(msg) {
                        alert('Error: ' + msg.responseText);
                    }
                </script>
            </div>
        </form>
    </body>
    </html>

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

    B.aspx.vb

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

    Imports System.Web.Services
    Imports System.Web.Services.Protocols
    Imports System.ComponentModel
    Imports System.Data.SqlClient
    Imports System.Data
    Imports System.Web.Services.WebService

    <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 B
        Inherits System.Web.UI.Page

        <System.Web.Script.Services.ScriptMethod()>
        <WebMethod()>
        Public Function ObtenerListadoRaiz(ByVal prefixText As String, ByVal count As Integer) As String()

            Dim Cn As New SqlConnection(ConfigurationManager.ConnectionStrings("bbdd").ConnectionString)

            Dim comando As New SqlCommand("SELECT Title FROM tbl_raiz WHERE idAgencia = 1 AND title LIKE '%' + @param + '%' ", Cn)

            comando.Parameters.AddWithValue("param", prefixText)
            Dim dr As SqlDataReader
            comando.Connection.Open()
            dr = comando.ExecuteReader
            Dim lista As New List(Of String)
            While dr.Read
                lista.Add(dr.Item("Title"))
            End While
            comando.Connection.Close()
            comando = Nothing
            Cn.Close()
            Cn = Nothing
            dr.Close()
            Return lista.ToArray
        End Function

    End Class

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

    La página se llama B.aspx y el error que me da un un alert con el siguiente texto. No he tocado nada en el web.config porque no se que hay que hacer, por tanto, si de ahí proviene el fallo lo desconozco. Este es el error que me da:

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

    Error: <!DOCTYPE html>
    <html>
        <head>
            <title>M&#233;todo web ObtenerListadoRaiz desconocido.<br>Nombre del par&#225;metro: methodName</title>
            <meta name="viewport" content="width=device-width" />
            <style>
             body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;}
             p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
             b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
             H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
             H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
             pre {font-family:"Consolas","Lucida Console",Monospace;font-size:11pt;margin:0;padding:0.5em;line-height:14pt}
             .marker {font-weight: bold; color: black;text-decoration: none;}
             .version {color: gray;}
             .error {margin-bottom: 10px;}
             .expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }
             @media screen and (max-width: 639px) {
              pre { width: 440px; overflow: auto; white-space: pre-wrap; word-wrap: break-word; }
             }
             @media screen and (max-width: 479px) {
              pre { width: 280px; }
             }
            </style>
        </head>

        <body bgcolor="white">

                <span><H1>Error de servidor en la aplicación '/'.<hr width=100% size=1 color=silver></H1>

                <h2> <i>M&#233;todo web ObtenerListadoRaiz desconocido.<br>Nombre del par&#225;metro: methodName</i> </h2></span>

                <font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">

                <b> Descripción: </b>Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.

                <br><br>

                <b> Detalles de la excepción: </b>System.ArgumentException: M&#233;todo web ObtenerListadoRaiz desconocido.<br>Nombre del par&#225;metro: methodName<br><br>

                <b>Error de código fuente:</b> <br><br>

                <table width=100% bgcolor="#ffffcc">
                   <tr>
                      <td>
                          <code>

    Se ha generado una excepci&#243;n no controlada durante la ejecuci&#243;n de la solicitud Web actual. La informaci&#243;n sobre el origen y la ubicaci&#243;n de la excepci&#243;n pueden identificarse utilizando la excepci&#243;n del seguimiento de la pila siguiente.</code>

                      </td>
                   </tr>
                </table>

                <br>

                <b>Seguimiento de la pila:</b> <br><br>

                <table width=100% bgcolor="#ffffcc">
                   <tr>
                      <td>
                          <code><pre>

    [ArgumentException: M&#233;todo web ObtenerListadoRaiz desconocido.
    Nombre del par&#225;metro: methodName]
       System.Web.Script.Services.WebServiceData.GetMethodData(String methodName) +220
       System.Web.Handlers.ScriptModule.OnPostAcquireRequestState(Object sender, EventArgs eventArgs) +247
       System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +139
       System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +195
       System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&amp; completedSynchronously) +88
    </pre></code>

                      </td>
                   </tr>
                </table>

                <br>

                <hr width=100% size=1 color=silver>

                <b>Información de versión:</b>&nbsp;Versión de Microsoft .NET Framework:4.0.30319; Versión ASP.NET:4.7.3282.0

                </font>

        </body>
    </html>
    <!--
    [ArgumentException]: M&#233;todo web ObtenerListadoRaiz desconocido.
    Nombre del par&#225;metro: methodName
       en System.Web.Script.Services.WebServiceData.GetMethodData(String methodName)
       en System.Web.Handlers.ScriptModule.OnPostAcquireRequestState(Object sender, EventArgs eventArgs)
       en System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
       en System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
       en System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
    -->

    miércoles, 1 de mayo de 2019 6:20

Respuestas

  • Arreglado, era tan simple como que no estaba poniendo entre comillas

    data: '{prefixText: ' + prefixText + ', count: ' + count + '}',

    y era

    data: '{prefixText: "' + prefixText + '", count: "' + count + '"}',

    además estaba pasándole el valor "count" que no lo usaba para nada y eso no hace mas que molestar.

    • Marcado como respuesta Jesús Prieto jueves, 2 de mayo de 2019 18:20
    jueves, 2 de mayo de 2019 18:20