Pergunta

jQuery 1.3.2, ASP.NET 2.0. Fazer uma chamada de AJAX para um PageMethod (WebMethod) retorna toda a página inteira / em vez de apenas a resposta. Um ponto de interrupção nas mostras método de página que nunca está sendo atingido. Eu tenho o atributo [WebMethod] no meu método, e é public static, corda retornos e não aceita parâmetros. Eu até tentei adicionar [ScriptService] no topo da minha classe para ver se ele ajudou, mas isso não aconteceu.

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

A chamada jQuery Eu 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 cabeçalhos de pedido / resposta, como por Firebug em FF3, são como se segue

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 por diversão para ver se ele ajudou, mas sem sorte lá.

Todas as sugestões?

Foi útil?

Solução

Você sabe que os métodos de página estão funcionando corretamente? Se você usar o ScriptManager o que eles funcionam?

Parece que você pode estar faltando um web.config entrada . Especificamente a seção HttpModules.

Outras dicas

Eu estava faltando uma linha do meu web.config:

<system.web>
  <httpModules>
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  </httpModules>
</system.web>

Eu encontrei este problema novamente hoje por um motivo diferente: eu tinha grafada "aplicação" no

contentType: 'application/json'

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

Se você já tentou tudo isso e ainda obter a página inteira retornou de sua PageMethod, você pode querer certificar-se de que você não está usando URLs amigáveis. Se você estiver usando-los, este 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 das minhas variáveis ??de seqüência em minha string HTML e no site que eu usei para obter o meu ajax chamada olhou como este.

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 só codificado minha página em vez de usar o loc var.

A maioria dos cenários de ajax que eu vi realmente deve chamar um serviço web ou 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 para não carregar a página inteira, aqui estão 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 completa, mas ainda muito mais do que você precisa para uma chamada de ajax simples. 2) separação de mau responsabilidades. A página é provavelmente responsável por bem colocar coisas fora, não a lógica que você está usando no método ajax.
3) Talvez você precisa de algum estado da sessão, mas que ainda deve estar disponível.

Atualmente estou atualizando meu conhecimento sobre este assunto ... Eu vou olhar para uma boa resposta a esta pergunta neste tópico, ou eu vou postar um na próxima semana. Aqui é a direção que eu estou dirigido

1) Envie JSON do servidor para o cliente e usar o JavaScript para atualizar sua página. - uma variedade de estruturas de torná-lo fácil de produzir JSON a partir do servidor web
. 2) JQuery faz chamadas ajax, manipulação de JSON, e cliente de formatação divertido, em vez de doloroso.

Depois de quase duas horas, e depois tinha tudo tentou i finalmente resolveu. @ O comentário de Marvin Zumbado ajudou me.I estava faltando o aspx dos meus url.I sei que este não é o meu melhor momento como um programador!

Ao comentar a seguinte linha no RouteConfig.cs funciona para mim

 settings.AutoRedirectMode = RedirectMode.Permanent;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top