2012-01-23 18 views
5

Estoy tratando de atender solicitudes AJAX con un método en mi página .aspx. Por algún motivo, no obtengo los datos que deseo. ¿Alguien puede decirme qué estoy haciendo mal?Servicio de solicitudes AJAX con webmethod en la página ASPX

MyPage.aspx:

<%@ Page Language="VB" Title="My Page" %> 
<%@ Import Namespace="System.Web.Services" %> 
<%@ Import Namespace="System.Collections.Generic" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<script runat="server"> 

    Protected Sub Page_Load(sender As Object, e As System.EventArgs) 

    End Sub 

    <WebMethod()> Public Function testmethod() As Integer 
     Return 5 
    End Function 

</script> 

<html> 
<!--...rest of page including mybutton and myresults--> 

JQuery:

$("#mybutton").click(function() { 
    $.ajax({ 
     type: "POST", 
     url: "mypage.aspx/testmethod", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg) { 
     alert("success"); 
     $("#myresults").html(msg.d); 
     }, 
     error: function(msg) { 
     alert("error:" + JSON.stringify(msg)); 
     } 
    }); 
}); 

Cuando hago clic mybutton consigo un "error:" alerta y mucho entonces toda HTML que dice:

Unknown web method testmethod. 
Parameter name: methodName 

Respuesta

12

El método es necesario que haya Shared:

<WebMethod()> Public Shared Function testmethod() As Integer 
    Return 5 
End Function 

Además, no estoy seguro de que los métodos de página son compatibles cuando no se utiliza un archivo de código subyacente.

+0

Gracias, esto resolvió el problema. – Flash

+2

Para agregar - En C# - necesita ser 'estático' – Lijo

0

¿Cuál es el error que se está transmitiendo? La razón por la que está viendo toda la página html es porque tiene un error en el código y el mensaje que se está transmitiendo es el html completo que le indica dónde está el error. Estoy seguro de que si corriges el error estarás bien.

No estoy seguro de si espera ver el mensaje de error del código subyacente. Recuerde: las funciones de éxito o de error que se invocan en la sección Ajax se invocan dependiendo de si el método del servicio web se llamó con éxito o no. Creo que estás pensando que verás el mensaje de error del método web aquí, pero en realidad, si el método web está arrojando el error, aún tendrías una llamada ajax exitosa y así la función "éxito" sería la que está ejecutándose. La función de "error" solo se ejecutará cuando falle toda la llamada de método web, por lo que no hay respuesta del servidor.

Espero que tenga sentido.

+0

Gracias me di cuenta de que después de publicar, he incluido el mensaje de error al final de la pregunta. – Flash

Cuestiones relacionadas