Chame o ASP.NET PageMethod / WebMethod com jQuery – retorna a página inteira

jQuery 1.3.2, ASP.NET 2.0. Fazer uma chamada AJAX para um PageMethod (WebMethod) retorna a página inteira / inteira em vez de apenas a resposta. Um ponto de interrupção no método da página mostra que ele nunca foi atingido. Eu tenho o atributo [WebMethod] no meu método, e é público estático, retorna string e não aceita nenhum parâmetro. Eu até tentei adicionar [ScriptService] no topo da minha class para ver se isso ajudou, mas não.

Eu vi este post Jquery AJAX com ASP.NET WebMethod Retornando página inteira que tinha meus mesmos sintomas, mas ainda estou tendo um problema. Eu li http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/ e sinto que estou seguindo isso para o T, mas ainda não sorte.

A chamada do jQuery que estou fazendo é:

jQuery.ajax({ type: 'POST', contentType: 'application/json; charset=utf-8', data: '{}', dataType: 'json', url: 'MyPage.aspx/SomePageMethod', success: function(result){ alert(result); } }); 

Os headers de solicitação / resposta, conforme o Firebug no FF3, são os seguintes

 Response Headers Server ASP.NET Development Server/8.0.0.0 Date Tue, 24 Feb 2009 18:58:27 GMT X-AspNet-Version 2.0.50727 Cache-Control private Content-Type text/html; charset=utf-8 Content-Length 108558 Connection Close Request Headers Host localhost:2624 User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 Accept application/json, text/javascript, */* Accept-Language en-us,en;q=0.5 Accept-Encoding gzip,deflate Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive 300 Connection keep-alive Content-Type application/json; charset=utf-8 X-Requested-With XMLHttpRequest Referer http://localhost:2624/MyApp/MyPage.aspx Content-Length 2 Cookie ASP.NET_SessionId=g1idhx55b5awyi55fvorj055; 

Eu adicionei um ScriptManager à minha página apenas para chutes para ver se isso ajudou, mas sem sorte.

Alguma sugestão?

Você sabe que os methods de página estão funcionando corretamente? Se você usa o ScriptManager, eles funcionam?

Parece que você pode estar perdendo uma input web.config . Especificamente a seção HttpModules.

Eu estava faltando uma linha do meu web.config:

      

Eu encontrei esse problema novamente hoje por um motivo diferente: eu tinha escrito incorretamente “aplicativo” em

 contentType: 'application/json' 

E estava obtendo uma resposta de página inteira em vez de uma chamada para o WebMethod.

Se você já tentou tudo isso e ainda recebe toda a página retornada do seu código, você pode querer certificar-se de que você não está usando URLs amigáveis. Se você estiver usando, esse truque pode ajudá-lo

Adicione esta linha no seu script js antes de fazer a chamada:

 PageMethods.set_path(PageMethods.get_path() + '.aspx'); 

Jogando isso aqui como uma nota lateral. Eu estava recebendo esse erro devido ao comprimento de minhas variables ​​de string na minha string HTML e o site que eu usei para obter o meu ajax chamado ficou assim.

 loc = (loc.substr(loc.length - 1, 1) == "/") ? loc + "Default.aspx" : loc; $.ajax({ type: "POST", url: loc + "/" + methodName, data: "{" + args + "}", contentType: "application/json; charset=utf-8", dataType: "json", success: onSuccess, error: onFail }); 

Não foi capaz de extrair o link .aspx corretamente, então eu apenas codifiquei minha página em vez de usar o loc var.

A maioria dos cenários ajax que eu vi realmente deve chamar um serviço da web ou um manipulador de script separado, não uma página. Isso é extremamente fácil de fazer em .net 3-5, não tão fácil em 2-0. Mesmo depois de descobrir (se) como não carregar a página inteira, aqui estão as razões para não chamar um método de página:

1) O método de página pode carregar menos coisas do que um carregamento de página completo, mas ainda muito mais do que você precisa para uma simples chamada de ajax. 2) Má separação de responsabilidades. A página é provavelmente responsável por colocar bem as coisas, não a lógica que você está usando no método ajax.
3) Talvez você precise de algum estado de session, mas isso ainda deve estar disponível.

Atualmente estou atualizando meu conhecimento sobre este assunto … Vou procurar uma boa resposta para esta pergunta neste tópico, ou postarei uma na próxima semana. Aqui está a direção que eu estou indo

1) Envie JSON do servidor para o cliente e use o javascript para atualizar sua página. – Uma variedade de estruturas facilita a produção de JSON a partir do servidor web.
2) JQuery faz chamadas ajax, json handling e formatação do cliente, em vez de doloroso.

Depois de quase duas horas e depois de ter tentado tudo eu finalmente resolvi isso. @ Comentário de Marvin Zumbado me ajudou. Eu estava faltando o .aspx do meu url.Eu sei que este não é o meu melhor momento como programador!