La solicitud Ajax devuelve 200 OK, pero se activa un evento de error en lugar de éxito

Resuelto Pankaj Mishra asked hace 13 años • 14 respuestas

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?

Pankaj Mishra avatar May 31 '11 18:05 Pankaj Mishra
Aceptado

jQuery.ajaxintenta convertir el cuerpo de la respuesta en función del dataTypeparámetro especificado o del Content-Typeencabezado 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 OKestado. 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 dataTypepará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"}
Salman A avatar May 31 '2011 11:05 Salman A

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
});
Philippe Genois avatar Oct 07 '2016 03:10 Philippe Genois

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
});
jaketrent avatar Jun 15 '2011 14:06 jaketrent