2008-12-08 26 views
36

Estoy haciendo algunas pruebas simples (en preparación para un proyecto más grande) para llamar a un ASP.NET WebMethod utilizando JQuery AJAX. En mi ejemplo, mi WebMethod devuelve una cadena simple. Sin embargo, cuando intento llamarlo usando JQuery, obtengo el contenido completo de la página HTML devuelto en lugar de solo mi cadena. ¿Qué me estoy perdiendo?Jquery AJAX con WebMethod ASP.NET Devolver toda la página

lado del cliente:

$(document).ready(function ready() { 
     $("#MyButton").click(function clicked(e) { 
      $.post("Default.aspx/TestMethod", 
       {name:"Bob"}, 
       function(msg) { 
        alert("Data Recieved: " + msg); 
       }, 
       "html" 
      ); 
     }); 
    }); 

el lado del servidor:

using System; 
using System.Web.Services; 

namespace JqueryAjaxText 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     [WebMethod] 
     public static string TestMethod(string name) 
     { 
      return "The value submitted was " + name; 
     } 
    } 
} 

Respuesta

18

Echa un vistazo a este enlace. Utilicé algunas de sus otras publicaciones para llamar al servicio de WCF con éxito. Asegúrese de revisar los artículos relacionados:

http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/

Lea el artículo, pero su esencia:

$("#Result").click(function() { 
    $.ajax({ 
     type: "POST", 
     url: "Default.aspx/GetDate", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg) { 
     $("#Result").text(msg.d); 
     } 
    }); 
}); 
+3

Asegúrese de que su web.config contiene algo equivalente a esto, dependiendo de la versión: ' \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t ' – Nathan

+1

La parte clave de esto es la línea contentType:" application/json; charset = utf-8 "sin esa línea, devolverá HTML. –

3

trate de cambiar el último parámetro "html" a "texto". Este parámetro especifica el tipo de datos que se devolverán.

+0

El problema es que el método no se llama. la llamada AJAX simplemente está recibiendo toda la página, renderizada tal como lo vería el navegador. – Dana

+2

¿Puedes intentar cambiar el "html" por "texto"? –

8

Creo que estaba siendo confundido con el parámetro "tipo" en $ .post jQuery mando. Después de hablar con algunas personas, parece que el tipo de devolución para llamar a un WebMethod DEBE ser "json". Estaba tratando de usar "html". Una vez lo cambié a "json" y luego todo funcionó como siempre. Entonces, aparentemente, un método decorado con [WebMethod] solo devuelve JSON, y ahí es donde estaba mi colgado.

Gracias por sus respuestas chicos.

+0

Sí, esto también me estaba beneficiando. ¡Gracias por la información! – Jagd

0

Tuve exactamente el mismo problema: WebMethod devolvió toda la página HTML en lugar de los datos previstos. Para mí, la solución vino de cambiar el interior ~/App_Start/RouteConfig.cs la siguiente línea:

settings.AutoRedirectMode = RedirectMode.Permanent; 

a

settings.AutoRedirectMode = RedirectMode.Off; 
Cuestiones relacionadas