c# - por - Hacer una llamada simple de Ajax al controlador en asp.net mvc
peticiones ajax desde asp net mvc (9)
Estoy tratando de comenzar con llamadas ASP.NET MVC Ajax.
Controlador:
public class AjaxTestController : Controller
{
//
// GET: /AjaxTest/
public ActionResult Index()
{
return View();
}
public ActionResult FirstAjax()
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
}
Ver:
<head runat="server">
<title>FirstAjax</title>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript">
$(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'');
}
});
</script>
</head>
Solo necesito imprimir una alerta con el método del controlador devolviendo datos. Sobre el código simplemente imprime "chamara" en mi opinión. Una alerta no está disparando.
ACTUALIZAR
Modifiqué mi controlador de la siguiente manera y comenzó a funcionar. No tengo una idea clara de por qué está funcionando ahora. Alguien por favor explique. El parámetro "a" no está relacionado, lo agregué porque no puedo agregar dos métodos con el mismo nombre de método y parámetros. Creo que esta podría no ser la solución, pero funciona
public class AjaxTestController : Controller
{
//
// GET: /AjaxTest/
[HttpGet]
public ActionResult FirstAjax()
{
return View();
}
[HttpPost]
public ActionResult FirstAjax(string a)
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
}
Agregue "JsonValueProviderFactory" en global.asax:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
}
Después de la actualización que has hecho,
- primero llamando a la acción FirstAjax con la solicitud predeterminada HttpGet y representa la vista Html en blanco. (Antes no la tenías)
- más adelante, al cargar los elementos DOM de esa vista, se activa su llamada Ajax y se muestra una alerta.
Anteriormente, solo devolvía JSON al navegador sin procesar HTML. Ahora tiene una vista HTML representada donde puede obtener sus Datos JSON.
No puede procesar directamente JSON sus datos simples, no HTML.
Elimine el atributo de datos ya que no está POSTING
nada al servidor (Su controlador no espera ningún parámetro).
Y en su Método AJAX puede usar Razor
y usar @Url.Action
lugar de una cadena estática:
$.ajax({
url: ''@Url.Action("FirstAjax", "AjaxTest")'',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: successFunc,
error: errorFunc
});
De su actualización:
$.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
});
En primer lugar, no es necesario tener dos versiones diferentes de las bibliotecas de jquery en una sola página, ya sea que "1.9.1" o "2.0.0" sean suficientes para hacer que las llamadas ajax funcionen.
Aquí está su código de controlador:
public ActionResult Index()
{
return View();
}
public ActionResult FirstAjax(string a)
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
Así es como debería verse tu vista:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
var a = "Test";
$.ajax({
url: "../../Home/FirstAjax",
type: "GET",
data: { a : a },
success: function (response) {
alert(response);
},
error: function (response) {
alert(response);
}
});
});
</script>
Es para su pregunta de ACTUALIZACIÓN.
Como no puede tener dos métodos con el mismo nombre y firma, debe usar el atributo ActionName:
ACTUALIZAR:
[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();
}
Y consulte this enlace para obtener una referencia adicional de cómo un método se convierte en una acción. Muy buena referencia sin embargo.
Si solo necesita presionar el Método C # en su Llamada Ajax solo necesita pasar dos tipos de materia y url si su solicitud es obtener, entonces solo necesita especificar la url solamente. por favor, siga el siguiente código, está funcionando bien.
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: Si usa FirstAjax en el mismo controlador en el que su Controlador de Vista no necesita el nombre del Controlador en la url. como url: ''FirstAjax'',
Use un Razor para cambiar dinámicamente su URL llamando a su acción de esta manera:
$.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''); }
});
Ver;
$.ajax({
type: ''GET'',
cache: false,
url: ''/Login/Method'',
dataType: ''json'',
data: { },
error: function () {
},
success: function (result) {
alert("success")
}
});
Método del controlador;
public JsonResult Method()
{
return Json(new JsonResult()
{
Data = "Result"
}, JsonRequestBehavior.AllowGet);
}
en lugar de url: serviceURL,
use
url: ''<%= serviceURL%>'',
¿Estás pasando 2 parámetros a successFunc?
function successFunc(data)
{
alert(data);
}