Fazendo uma chamada Ajax simples para o controlador no asp.net mvc

Estou tentando começar com as chamadas ASP.NET MVC Ajax.

Controlador:

public class AjaxTestController : Controller { // // GET: /AjaxTest/ public ActionResult Index() { return View(); } public ActionResult FirstAjax() { return Json("chamara", JsonRequestBehavior.AllowGet); } } 

Visão:

  FirstAjax    $(document).ready(function () { var serviceURL = '/AjaxTest/FirstAjax'; $.ajax({ type: "POST", url: serviceURL, data: param = "", contentType: "application/json; charset=utf-8", dataType: "json", success: successFunc, error: errorFunc }); function successFunc(data, status) { alert(data); } function errorFunc() { alert('error'); } });   

Eu só preciso imprimir um alerta com o método do controlador retornando dados. Acima código apenas imprimir “chamara” na minha opinião. Um alerta não está triggersndo.

ATUALIZAR

Eu modifiquei meu controlador como abaixo e comecei a trabalhar. Eu não tenho uma ideia clara do porquê de estar funcionando agora. Alguém por favor explique. O parâmetro “a” não relacionado eu adicionei porque eu não posso adicionar dois methods com o mesmo nome de método e parâmetros.Eu acho que isso pode não ser a solução, mas o seu trabalho

 public class AjaxTestController : Controller { // // GET: /AjaxTest/ [HttpGet] public ActionResult FirstAjax() { return View(); } [HttpPost] public ActionResult FirstAjax(string a) { return Json("chamara", JsonRequestBehavior.AllowGet); } } 

Após a atualização que você fez,

  1. primeiro chamando a ação FirstAjax com a solicitação HttpGet padrão e renderiza a exibição Html em branco. (Anteriormente você não estava tendo)
  2. mais tarde, ao carregar os elementos DOM dessa visualização, sua chamada Ajax será acionada e exibirá o alerta.

Anteriormente, você só retornava o JSON ao navegador sem renderizar nenhum HTML. Agora ele tem uma visualização HTML renderizada onde pode obter seus dados JSON.

Você não pode renderizar diretamente JSON seus dados simples não HTML.

Remova o atributo de dados, pois você não está POSTING nada no servidor (seu controlador não espera nenhum parâmetro).

E no seu método AJAX você pode usar o Razor e usar @Url.Action vez de uma string estática:

 $.ajax({ url: '@Url.Action("FirstAjax", "AjaxTest")', contentType: "application/json; charset=utf-8", dataType: "json", success: successFunc, error: errorFunc }); 

De sua atualização:

 $.ajax({ type: "POST", url: '@Url.Action("FirstAjax", "AjaxTest")', contentType: "application/json; charset=utf-8", data: { a: "testing" }, dataType: "json", success: function() { alert('Success'); }, error: errorFunc }); 

Use um Razor para alterar dinamicamente seu URL, chamando sua ação assim:

 $.ajax({ type: "POST", url: '@Url.Action("ActionName", "ControllerName")', contentType: "application/json; charset=utf-8", data: { data: "yourdata" }, dataType: "json", success: function(recData) { alert('Success'); }, error: function() { alert('A error'); } }); 

É para a sua pergunta UPDATE.

Como você não pode ter dois methods com o mesmo nome e assinatura, é necessário usar o atributo ActionName:

ATUALIZAR:

 [HttpGet] public ActionResult FirstAjax() { Some Code--Some Code---Some Code return View(); } [HttpPost] [ActionName("FirstAjax")] public ActionResult FirstAjaxPost() { Some Code--Some Code---Some Code return View(); } 

E, por favor, consulte este link para mais referências sobre como um método se torna uma ação. Muito boa referência embora.

Primeiro, não há necessidade de ter duas versões diferentes de bibliotecas jquery em uma página, “1.9.1” ou “2.0.0” é suficiente para fazer as chamadas ajax funcionarem.

Aqui está o seu código do controlador:

  public ActionResult Index() { return View(); } public ActionResult FirstAjax(string a) { return Json("chamara", JsonRequestBehavior.AllowGet); } 

É assim que sua visão deve ser:

   

Se você só precisa acertar o método C # em sua chamada Ajax, você só precisa passar dois tipos de assunto e url se o seu pedido for get, então você só precisa especificar o URL apenas. por favor siga o código abaixo está funcionando bem.

 C# Code [HttpGet] public ActionResult FirstAjax() { return Json("chamara", JsonRequestBehavior.AllowGet); } Java Script Code if Get Request $.ajax({ url: 'home/FirstAjax', success: function(responce){ alert(responce.data)}, error: function(responce){ alert(responce.data)} }); Java Script Code if Post Request and also [HttpGet] to [HttpPost] $.ajax({ url: 'home/FirstAjax', type:'POST', success: function(responce){ alert(responce)}, error: function(responce){ alert(responce)} }); 

Nota: Se você tiver o FirstAjax no mesmo controlador em que o seu View Controller, então não precisará do nome do Controller no url. como url: 'FirstAjax',

Visão;

  $.ajax({ type: 'GET', cache: false, url: '/Login/Method', dataType: 'json', data: { }, error: function () { }, success: function (result) { alert("success") } }); 

Método Controlador;

  public JsonResult Method() { return Json(new JsonResult() { Data = "Result" }, JsonRequestBehavior.AllowGet); } 

em vez de url: serviceURL, use

 url: '< %= serviceURL%>', 

e você está passando 2 parâmetros para o successFunc?

 function successFunc(data) { alert(data); } 

Adicione “JsonValueProviderFactory” em global.asax:

 protected void Application_Start() { AreaRegistration.RegisterAllAreas(); ValueProviderFactories.Factories.Add(new JsonValueProviderFactory()); }