La solicitud Ajax devuelve 200 OK, pero se activa un evento de error en lugar de éxito
Implementé una solicitud Ajax en mi sitio web y estoy llamando al punto final desde una página web. Siempre devuelve 200 OK , pero jQuery ejecuta el evento de error.
Intenté muchas cosas, pero no pude resolver el problema. Estoy agregando mi código a continuación:
Código jQuery
var row = "1";
var json = "{'TwitterId':'" + row + "'}";
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: json,
dataType: 'json',
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
function AjaxSucceeded(result) {
alert("hello");
alert(result.d);
}
function AjaxFailed(result) {
alert("hello1");
alert(result.status + ' ' + result.statusText);
}
código C# paraJqueryOpeartion.aspx
protected void Page_Load(object sender, EventArgs e) {
test();
}
private void test() {
Response.Write("<script language='javascript'>alert('Record Deleted');</script>");
}
Necesito la ("Record deleted")
cadena después de una eliminación exitosa. Puedo eliminar el contenido, pero no recibo este mensaje. ¿Es esto correcto o estoy haciendo algo mal? ¿Cuál es la forma correcta de resolver este problema?
jQuery.ajax
intenta convertir el cuerpo de la respuesta en función del dataType
parámetro especificado o del Content-Type
encabezado enviado por el servidor. Si la conversión falla (por ejemplo, si JSON/XML no es válido), se activa la devolución de llamada de error.
Su código AJAX contiene:
dataType: "json"
En este caso jQuery:
Evalúa la respuesta como JSON y devuelve un objeto JavaScript. […] Los datos JSON se analizan de manera estricta; cualquier JSON con formato incorrecto se rechaza y se genera un error de análisis. […] también se rechaza una respuesta vacía; el servidor debería devolver una respuesta nula o {} en su lugar.
Su código del lado del servidor devuelve un fragmento HTML con 200 OK
estado. jQuery esperaba un JSON válido y, por lo tanto, activa la devolución de llamada de error del que se queja parseerror
.
La solución es eliminar el dataType
parámetro de su código jQuery y hacer que el código del lado del servidor devuelva:
Content-Type: application/javascript
alert("Record Deleted");
Pero prefiero sugerir devolver una respuesta JSON y mostrar el mensaje dentro de la devolución de llamada exitosa:
Content-Type: application/json
{"message": "Record deleted"}
Simplemente tienes que eliminar el tipo de datos: "json" en tu llamada AJAX
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: json,
dataType: 'json', //**** REMOVE THIS LINE ****//
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
He tenido buena suerte con el uso de varios mensajes de correo electrónico separados por espacios dataType
( jQuery 1.5+ ). Como en:
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: json,
dataType: 'text json',
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});