<script> function editComment(id) { var content = $('#Content').val(); var modelData = { 'Id': id, 'Content': content }; $.ajax({ type: 'POST', dataType: 'json', url: '@Url.Action("EditC", "Comment")', data: JSON.stringify({ model: modelData }), contentType: 'application/json', success: function () { alert("YES"); }, error: function () { alert("Error"); } }); } </script>
Aquí el servidor devuelve 200 OK, pero por alguna razón se llama a la función de error. Tanto el type
como el tipo de contentType
parecen ser correctos. ¿Algúna idea de cómo arreglar esto?
Editar: después de agregar
error: function (xhr, textStatus, error) { console.log(xhr.responseText); console.log(xhr.statusText); console.log(textStatus); console.log(error); }
esto es lo que se registra:
parsererror parsererror SyntaxError: Unexpected end of JSON input at parse (<anonymous>) at ajaxConvert (jquery-3.4.1.js:9013:19) at done (jquery-3.4.1.js:9483:15) at XMLHttpRequest.<anonymous> (jquery-3.4.1.js:9785:9)
Pasando a una respuesta para futuros lectores...
De hecho, el servidor está devolviendo una respuesta exitosa, pero una respuesta exitosa vacía :
return new HttpStatusCodeResult(200);
Sin embargo, el código del lado del cliente espera un JSON válido:
dataType: 'json',
Como resultado, después de recibir la respuesta correcta, internamente el código jQuery intenta analizar esa respuesta como JSON y eso falla, lo que genera la devolución de llamada de error
.
Dado que no hay un cuerpo de respuesta (y en la mayoría de los casos, incluso cuando lo hay, siempre que el servidor devuelva el tipo MIME correcto), no necesita ni desea especificar un tipo de dataType
en la operación jQuery AJAX. Simplemente elimine esta parte:
dataType: 'json',