javascript - por - Llamada ajax jquery: los parámetros de datos no se pasan a la acción del controlador MVC
llamar controlador desde ajax (5)
Estoy pasando dos parámetros de cadena de una llamada jQuery ajax a un método de controlador MVC, esperando una respuesta json. Puedo ver que los parámetros se completan en el lado del cliente, pero los parámetros coincidentes en el lado del servidor son nulos.
Aquí está el javascript:
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "List/AddItem",
data: "{ ListID: ''1'', ItemName: ''test'' }",
dataType: "json",
success: function(response) { alert("item added"); },
error: function(xhr, ajaxOptions, thrownError) { alert(xhr.responseText); }
});
Aquí está el método del controlador:
Function AddItem(ByVal ListID As String, ByVal ItemName As String) As JsonResult
''code removed for brevity
''ListID is nothing and ItemName is nothing upon arrival.
return nothing
End Function
¿Qué estoy haciendo mal?
En mi caso, si quito el contentType
, obtengo el error interno del servidor .
Esto es lo que obtuve trabajando después de múltiples intentos:
var request = $.ajax({
type: ''POST'',
url: ''/ControllerName/ActionName'' ,
contentType: ''application/json; charset=utf-8'',
data: JSON.stringify({ projId: 1, userId:1 }), //hard-coded value used for simplicity
dataType: ''json''
});
request.done(function(msg) {
alert(msg);
});
request.fail(function (jqXHR, textStatus, errorThrown) {
alert("Request failed: " + jqXHR.responseStart +"-" + textStatus + "-" + errorThrown);
});
Y este es el código del controlador:
public JsonResult ActionName(int projId, int userId)
{
var obj = new ClassName();
var result = obj.MethodName(projId, userId); // variable used for readability
return Json(result, JsonRequestBehavior.AllowGet);
}
Tenga en cuenta que el caso de ASP.NET es un poco diferente, tenemos que aplicar JSON.stringify()
a los datos tal como se menciona en la update de esta respuesta.
Lo intenté:
<input id="btnTest" type="button" value="button" />
<script type="text/javascript">
$(document).ready( function() {
$(''#btnTest'').click( function() {
$.ajax({
type: "POST",
url: "/Login/Test",
data: { ListID: ''1'', ItemName: ''test'' },
dataType: "json",
success: function(response) { alert(response); },
error: function(xhr, ajaxOptions, thrownError) { alert(xhr.responseText); }
});
});
});
</script>
y C#:
[HttpPost]
public ActionResult Test(string ListID, string ItemName)
{
return Content(ListID + " " + ItemName);
}
Funcionó. Elimine contentType
y establezca data
sin comillas dobles.
Necesita agregar -> tipo de contenido: "application / json; charset = utf-8",
<script type="text/javascript">
$(document).ready( function() {
$(''#btnTest'').click( function() {
$.ajax({
type: "POST",
url: "/Login/Test",
data: { ListID: ''1'', ItemName: ''test'' },
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function(response) { alert(response); },
error: function(xhr, ajaxOptions, thrownError) { alert(xhr.responseText); }
});
});
});
</script>
Si tiene problemas con el almacenamiento en caché de ajax, puede desactivarlo:
$.ajaxSetup({cache: false});
var json = {"ListID" : "1", "ItemName":"test"};
$.ajax({
url: url,
type: ''POST'',
data: username,
cache:false,
beforeSend: function(xhr) {
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json");
},
success:function(response){
console.log("Success")
},
error : function(xhr, status, error) {
console.log("error")
}
);