2010-05-04 27 views
5

creé un WebMethod en el archivo de código subyacente de mi página como tal:ASP .NET: No se puede llamar Página WebMethod usando jQuery

[System.Web.Services.WebMethod()] 
public static string Test() 
{ 
    return "TEST"; 
} 

creé la siguiente página HTML para probarlo:

<html> 
<head> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"/></script> 
    <script type="text/javascript"> 
     function test() {    
      $.ajax({ 
       type: "POST", 
       url: "http://localhost/TestApp/TestPage.aspx/Test", 
       data: "{}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "text", 
       success: function(msg) { 
        alert(msg.d); 
       } 
      }); 
     } 
    </script> 
</head> 
<body> 
    <button onclick="test();">Click Me</button> 
</body> 
</html> 

Cuando hago clic en el botón, el AJAX se dispara, pero no se devuelve nada. Cuando depuro mi código, el método Test() ni siquiera se llama. ¿Algunas ideas?

Respuesta

6

tratar

url: "TestPage.aspx/Test" 

o cualquier URL que llegará a la página relativa.

Es posible que infrinja inadvertidamente same origin policy.

Además, aunque todavía no está allí, está esperando un objeto d: envuelto. Como es que solo van a obtener una cadena.

Esto debería llevarlo a donde quiere ir.

function test() {    
     $.ajax({ 
      type: "POST", 
      url: "TestPage.aspx/Test", 
      data: "{}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(msg) { 
       alert(msg.d); 
      } 
     }); 
    } 
+0

¡Problema solucionado! Gracias Code Poet y todos los demás que respondieron. Era doble: el 'tipo de datos 'era parte del problema, así que le di a todos un voto de quién contestó en esa parte. En última instancia, todo se redujo a violar inadvertidamente la misma política de origen, por lo que marqué esto como la solución. Gracias de nuevo a todos. ¡Lo aprecio! – John

+0

@John feliz de ayudar. –

0

debe configurar Test() para aceptar/liberar la POST

+0

- WebMethod es todo lo que se necesita en el lado del servidor. –

0

Si los PageMethods están debidamente registrados en su página, usted debe ser capaz de llamar con un objeto llamado Microsoft registrado PageMethods.

Su javascript debe ejecutarse después de que la página aspx haya cargado todas las bibliotecas específicas de Microsoft. Cuando se cargan, puede llamar a su PageMethod de esta manera:

PageMethods.Test (function() OnSucceeded {}, function() OnFailed {});

Aquí hay un enlace a mejores ejemplos:

http://www.junasoftware.com/blog/using-jquery-ajax-and-page-methods-with-a-asp.net-webservice.aspx

Si no está ya, recomiendo encarecidamente utilizar Firebug para ayudar a depurar estas llamadas del lado del cliente. Firebug te dará toda la información que necesitas para determinar qué está pasando realmente.

getfirebug.com

+0

-1 y bienvenido a StackOverflow. La pregunta indica específicamente que jQuery está en uso. MsAjax NO está obligado a publicar en un método de página. –

+0

Bien, es suficiente. Me pareció que estaba buscando la manera de hacerlo funcionar, y les di una alternativa.Estoy de acuerdo en que MsAjax no es * requerido * para que funcione, pero estaría disponible y podría ser una alternativa viable. La pregunta indica específicamente que jQuery está en uso, pero no dice dónde se debe usar jQuery. – Jeremy

+0

Lo siento por Jeremy. Debería haber sido más claro, pero sí, tiene que ser a través de jQuery. Sin embargo, definitivamente tendré en mente tu respuesta si decido ir a la ruta MsAjax en el futuro. – John

1

Hice esta función javascript para llamar webMethods usando jQuery:

function pageMethod(fn, params, successFn, errorFn) { 
    var pagePath = window.location.pathname; 

    var jsonData = $.toJSON(params); 

    $.ajax({ 
     type: "POST", 
     url: pagePath + "/" + fn, 
     contentType: "application/json; charset=utf-8", 
     data: jsonData, 
     dataType: "json", 
     success: successFn, 
     error: errorFn 
    }); 
} 

Esa $ .toJson serialización se realiza por jquery.json-1.3 plugin.

Y como se puede ver, tipo de datos debe ser "json"

+0

¡Gracias por compartir! Utilizaré esta pequeña y práctica función para seguir adelante. – John

2

creo que tipo de datos debe ser "json". Agregue una función de error para ver qué estado de error obtiene, es decir, 404 no encontrado, 500 error de servidor, etc. etc.

+0

Buena llamada. ¡Gracias! – John

Cuestiones relacionadas