none
Dúvidas com Jquery Ajax + WebMethod/WebServices RRS feed

  • Pergunta

  • Dúvidas com Jquery Ajax + WebMethod/WebServices
    
    Caros boa noite
    
    Estava eu aqui dando uma estudada no assunto de Jquery Ajax + WebMethod/WebServices quando surgiu dúvidas logo de inicio
    
    Montei uma WebApplication dentro dela as pastinhas App_Code, JS ea página Default.aspx
    
    Na Default.aspx referenciei o Jquery pela url do Google e dentro dela tenho um botão <input type="button" id="btnTeste" value="Enviar" />
    
    Tenho a seguinte função:
    
    <script type="text/javascript">
        $("#btnTeste").click(function() {
                    $.ajax({
                        type: "POST",
                        url: "Default.aspx/GetDateTime",
                        data: "{}",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function(msg) 
                        {
                            $("#divDate").html(msg.d);                        
                        }
                    });
                });     
    </script>
    
    E no Default.aspx.cs tenho:
     
    
    [WebMethod]
    public static string GetDateTime()
    {
    	return DateTime.Now.ToString();
    }
    
    Ai começam minhas dúvidas... 1ª) Essa função se eu deixa-la logo no inicio da Default.aspx logo embaixo do <title>Teste</title> ela não funciona porem se eu deixa-la depois do </form> antes do </body> ela funciona perfeitamente Alguém saberia dizer dela só funcionar declarada no final da Default.aspx? 2ª) Deixando a função no final da Default.aspx e deixando o método GetDateTime no próprio Default.aspx.cs maravilha retorna tudo certinho. Porem se eu colocar na função Javascript para chamar um WebService dentro da pasta App_Code não funciona nada, olhando pelo FireBug ele mostra o seguinte erro:
    <script type="text/javascript">
        $("#btnTestea").click(function() {
                    $.ajax({
                        type: "POST",
                        url: "/App_Code/WebService.asmx/GetDateTime",
                        data: "{}",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function(msg) 
                        {
                            $("#dvDate").html(msg.d);
                            //alert(msg);
                        }
                    });
                });
         
        </script>
    

    POST http://localhost:50721/WebService.asmx/GetDateTime 500 Internal Server Error 135ms
    "NetworkError: 500 Internal Server Error - http://localhost:50721/WebService.asmx/GetDateTime"
    
    Server Error in '/' Application.
    No web service found at: /WebService.asmx.
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
    
    Exception Details: System.InvalidOperationException: No web service found at: /WebService.asmx.
    
    Source Error:
    
    An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
    
    Stack Trace:
    
    [InvalidOperationException: No web service found at: /WebService.asmx.]
       System.Web.Script.Services.WebServiceData.GetWebServiceData(HttpContext context, String virtualPath, Boolean failIfNoData, Boolean pageMethods, Boolean inlineScript) +917
       System.Web.Script.Services.RestHandler.CreateHandler(HttpContext context) +105
       System.Web.Script.Services.RestHandlerFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated) +105
       System.Web.Script.Services.ScriptHandlerFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated) +145
       System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig) +175
       System.Web.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +128
       System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +161
    
    Alguém ja consegiu fazer isso do jeito que eu estou tentando? 
    Como eu resolvo isso?
    
    3ª) É possivel eu fazer todas as chamadas JavaScript para um arquivo externo e não declarado tudo dentro da mesma pagina?
    Por exemplo no <input type="button" id="btnTeste" value="Enviar" /> fazer um onclick chamando uma função dentro do arquivo.js fazendo essa mesma requisição Ajax?
    
    Bom tentei ser o mais claro possivel nas minhas dúvidas... Rs
    
    Agradeço a quem puder ajudar!
    
    Abraços!
    
    • Editado Fernando Anjos quarta-feira, 5 de outubro de 2011 04:19 Melhor visualização do código postado
    quarta-feira, 5 de outubro de 2011 04:17

Respostas

  • Oi, Fernando,

     

    Vamos por partes.

    1) Como não sei a mensagem de erro, posso supor que o motivo seja um entre dois :

    A) Sua função está usando jquery, fato. Se deixa-la antes da tag script que chama a biblioteca jquery terá um erro.

    ou

    B) Sua função faz atribuição ao click do botão, porém sua função não espera toda a página ser carregada para fazer isso. Desta forma se deixada no inicio a função é executada antes do botão estar na página, não atribui o click e não gera o resultado.

    A solução é usar o $(documento).ready( function () { seu código aqui  })   do jquery

    2o) Você está tentando usar REST ( http://localhost:50721/WebService.asmx/GetDateTime - método na URL é uma característica) com arquivo .asmx. Arquivo .asmx não suporta REST, este padrão só passou a ser suportado com serviços WCF - que recomendo muito que você use - e apenas com a configuração especifica para ser acessado via client (scriptservice se minha memória não me falha).

    3o) Sim, sem problema algum.

    Abs,


    Dennes
    MCT,MCPD,MCITP,MCDBA

    Conheça o devASPNet no Facebook - http://facebook.com/devASPNet

     


    Dennes - Se resolveu, classifique a mensagem, por favor - [http://www.bufaloinfo.com.br] NOVO DVD Segurança no ASP.NET : http://www.bufaloinfo.com.br/LearingSeriesSegurancaASPNET2.asp
    quarta-feira, 5 de outubro de 2011 04:27
  • Oi, Fernando,

     

    Siga os links a partir deste - http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=1096063476593371512 - e use esses exemplos.


    Abs,

    Dennes Torres
    MCT, MCPD, MCITP, MCDBA

    Conheça o devASPNet no facebook : facebook.com/devaspnet


    Dennes - Se resolveu, classifique a mensagem, por favor - [http://www.bufaloinfo.com.br] NOVO DVD Segurança no ASP.NET : http://www.bufaloinfo.com.br/LearingSeriesSegurancaASPNET2.asp
    • Marcado como Resposta Harley Araujo sexta-feira, 4 de novembro de 2011 13:06
    sábado, 8 de outubro de 2011 14:55

Todas as Respostas

  • Oi, Fernando,

     

    Vamos por partes.

    1) Como não sei a mensagem de erro, posso supor que o motivo seja um entre dois :

    A) Sua função está usando jquery, fato. Se deixa-la antes da tag script que chama a biblioteca jquery terá um erro.

    ou

    B) Sua função faz atribuição ao click do botão, porém sua função não espera toda a página ser carregada para fazer isso. Desta forma se deixada no inicio a função é executada antes do botão estar na página, não atribui o click e não gera o resultado.

    A solução é usar o $(documento).ready( function () { seu código aqui  })   do jquery

    2o) Você está tentando usar REST ( http://localhost:50721/WebService.asmx/GetDateTime - método na URL é uma característica) com arquivo .asmx. Arquivo .asmx não suporta REST, este padrão só passou a ser suportado com serviços WCF - que recomendo muito que você use - e apenas com a configuração especifica para ser acessado via client (scriptservice se minha memória não me falha).

    3o) Sim, sem problema algum.

    Abs,


    Dennes
    MCT,MCPD,MCITP,MCDBA

    Conheça o devASPNet no Facebook - http://facebook.com/devASPNet

     


    Dennes - Se resolveu, classifique a mensagem, por favor - [http://www.bufaloinfo.com.br] NOVO DVD Segurança no ASP.NET : http://www.bufaloinfo.com.br/LearingSeriesSegurancaASPNET2.asp
    quarta-feira, 5 de outubro de 2011 04:27
  • Fala Dennes obrigado pelas dicas man! Duvidas resolvidas!

    Outras duvidas... Rs

    Achei esse exemplo na net

    http://cbsa.com.br/post/consumindo-webservice-com-jquery-em-aspnet-c-ajax.aspx

    Fiz do jeito que ele montou mas não funcionou dá esse erro aqui

    http://stackoverflow.com/questions/2167119/403-forbidden-error

    Pesquisei algo a respeito desse erro e não achei/entendi nada...

    Alguém para dar um help ae para mim...

    Obrigado! Abraço!

     


    sexta-feira, 7 de outubro de 2011 01:17
  • Oi, Fernando,

     

    Siga os links a partir deste - http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=1096063476593371512 - e use esses exemplos.


    Abs,

    Dennes Torres
    MCT, MCPD, MCITP, MCDBA

    Conheça o devASPNet no facebook : facebook.com/devaspnet


    Dennes - Se resolveu, classifique a mensagem, por favor - [http://www.bufaloinfo.com.br] NOVO DVD Segurança no ASP.NET : http://www.bufaloinfo.com.br/LearingSeriesSegurancaASPNET2.asp
    • Marcado como Resposta Harley Araujo sexta-feira, 4 de novembro de 2011 13:06
    sábado, 8 de outubro de 2011 14:55