none
Ajax funciona local, mas não funciona no servidor RRS feed

  • Pergunta

  • Prezados,

    tenho uma aplicação em asp.net mvc 5 em que o código abaixo funciona localmente (visual studio 2012), mas não funciona após a publicação no servidor.

    controllerAction = "/Controller/Action/"
    controller = "/Controller/"
    
    $('#approve-btn').click(function () {
    $.ajax({
        type: "POST",
        url: controllerAction,
        data: { id: idElementoClicado },
        datatype: "html",
        success: function (data) {
            $("#ajaxgrid").load(controller + ' #ajaxgrid', function () {
            });
    
        },
        error: function () {
            alert(response);
        }
    });
    
    $('#modal-container').modal('hide');
    });
    
    [HttpPost]
    public ActionResult Excluir(CentroCustoViewModel viewModel)
    {
      //bloco de execução
    
      return Json(datasource, JsonRequestBehavior.AllowGet);
    }

    Ao clicar no botão que dispara a ação sempre cai no evento de error e emite o alert.

    Alguém sabe o que pode estar acontecendo?

    Obrigado

    quarta-feira, 27 de janeiro de 2016 19:19

Respostas

  • Olá

    Pode ser que o problema esteja na URL:

    controllerAction = "/Controller/Action/"
    controller = "/Controller/"
    
    $('#approve-btn').click(function () {
    $.ajax({
        type: "POST",
        url: controllerAction,

    Tenta assim

    url: '@Url.Action("NomeDaAction","NomeDoController")'

    • Marcado como Resposta TRod017 quinta-feira, 28 de janeiro de 2016 18:17
    quinta-feira, 28 de janeiro de 2016 14:34

Todas as Respostas

  • Qual é o erro que aparece no response ? coloque assim para saber a reposta.

     error: function (response) {
            alert(JSON.stringify(response));
        }

    Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Sugerido como Resposta Erick WendelMVP quinta-feira, 28 de janeiro de 2016 00:57
    quinta-feira, 28 de janeiro de 2016 00:57
  • Bom dia Erick, Descobri o erro, mas ainda não sei como resolve-lo. A aplicação é uma aplicação que fica dentro de um web site (falando em termos de IIS), onde o web site é um WordPress.

    A aplicação é chamada pela url: http://servidor e obviamente a aplicação é chamada pela url: http://servidor/aplicacao. A aplicação não funcionava, foi quando eu pesquisando vi que deveria colocar a seguinte tag no web.config:

    <system.webServer>
        <rewrite>
          <rules>
            <clear />
          </rules>
        </rewrite>
    </system.webServer>


    A resposta do alert após a alteração que me indicou foi:

    {"readyState":4,"responseText":"\r\n\r\n\r\n<!DOCTYPE html PUBLIC \
    "-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n
    <html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n<head>    \r\n    
    <title>Nothing found for  Controller Action</title>\r\n\t\r\n\t
    <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" />\r\n\t
    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\" />\r\n\t
    <meta name=\"google-site-verification\" content=\"-Pl4Q_ZZk6gRpxQoSCnJNrvDFn3XLZcl05YntYcr4C0\" />\r\n\t\r\n\t
    <link href='http://fonts.googleapis.com/css?family=Ubuntu:light,regular,bold' rel='stylesheet' type='text/css'>\r\n   \t\r\n\t<!--<link rel=\"apple-touch-icon\" href=\"http://servidor/wp-content/themes/abc/media/images/iphone.png\" />-->\r\n\t
    <link rel=\"stylesheet\" type=\"text/css\" href=\"http://servidor/wp-content/themes/abc/style.css\" />\r\n  \t
    <link rel=\"stylesheet\" href=\"http://servidor/wp-content/themes/abc/media/css/print.css\" type=\"text/css\" media=\"print\" />\r\n\t
    <link rel=\"stylesheet\" href=\"http://servidor/wp-content/themes/abc/media/css/intervencao.css\" type=\"text/css\" />\r\n\t
    <script type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js\"></script>\r\n\t\r\n\t\t\r\n\t
    <link rel='stylesheet' id='intcom-slides-css'  href='http://servidor/wp-content/plugins/intcom-slides/css/intcom-slides.css?ver=1.0' type='tex...ries=no, menubar=no, resizable=no, fullscreen=no');\r\n\r\n}\r\n\r\nfunction Popup_Modal(URL) {\r\n\r\n    var width = 600;\r\n    var height = 530;\r\n\r\n    var left = 99;\r\n    var top = 99;\r\n\r\n    window.open(URL, 'janela', 'width=' + width + ', height=' + height + ', top=' + top + ', left=' + left + ', scrollbars=yes, status=no, toolbar=no, location=no, directories=no, menubar=no, resizable=no, fullscreen=no');\r\n\r\n}\r\n\r\nfunction PopupRaceDay(URL) {\r\n\r\n    var width = 1020;\r\n    var height = 500;\r\n\r\n    var left = 99;\r\n    var top = 99;\r\n\r\n    window.open(URL, 'janela', 'width=' + width + ', height=' + height + ', top=' + top + ', left=' + left + ', scrollbars=yes, status=no, toolbar=no, location=no, directories=no, menubar=no, resizable=no, fullscreen=no');\r\n\r\n}\r\n\r\n\r\n</script>\r\n\r\n\r\n\r\n    
    <script type=\"text/javascript\">\r\n        var _gaq = _gaq || [];\r\n        _gaq.push(['_setAccount', 'UA-28697560-1']);\r\n        _gaq.push(['_trackPageview']);\r\n\r\n        (function () {\r\n            var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\r\n            ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\r\n            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\r\n        })();\r\n    </script>\r\n    \r\n      \r\n\r\n
    </body>\r\n
    </html>","status":404,"statusText":"Not Found"}

    Pelo jeito o Ajax ainda está com problemas de rota. Você sabe o que eu posso fazer pra resolver isso??? Obrigado. :)



    • Editado TRod017 quinta-feira, 28 de janeiro de 2016 13:11
    quinta-feira, 28 de janeiro de 2016 12:51
  • Olá

    Pode ser que o problema esteja na URL:

    controllerAction = "/Controller/Action/"
    controller = "/Controller/"
    
    $('#approve-btn').click(function () {
    $.ajax({
        type: "POST",
        url: controllerAction,

    Tenta assim

    url: '@Url.Action("NomeDaAction","NomeDoController")'

    • Marcado como Resposta TRod017 quinta-feira, 28 de janeiro de 2016 18:17
    quinta-feira, 28 de janeiro de 2016 14:34
  • Obrigado Richof, fiz isso e funcionou. 

    O problema é que o 

    System.Web.Helpers.WebGrid 

    estava matando o ajax, por isso se perdia no caminho. 

    Alterei a url do ajax para:

    '@Url.Action("NomeDaAction","NomeDoController")'

    e retirei a seguinte linha antes do @grid.GetHtml(...)

     using ((Html.BeginForm()))
     { 

    Feito isso, tudo funcionou. 

    Obrigado pela ajuda pessoal. :)




    • Editado TRod017 quinta-feira, 28 de janeiro de 2016 18:26
    quinta-feira, 28 de janeiro de 2016 18:18