He implementado una solicitud de 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 # para JqueryOpeartion.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 la eliminación exitosa. Puedo eliminar el contenido, pero no recibo este mensaje. ¿Es correcto o estoy haciendo algo mal? ¿Cuál es la forma correcta de resolver este problema?
TwitterId
, entonces usted tiene que pasar un objeto adata
, no es una cadena:data: {TwitterId: row}
.Respuestas:
jQuery.ajax
intenta convertir el cuerpo de respuesta según eldataType
parámetro especificado o elContent-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:
En este caso jQuery:
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, dispara el error de devolución de llamada quejándoseparseerror
.La solución es eliminar el
dataType
parámetro de su código jQuery y hacer que el código del lado del servidor regrese:Pero preferiría sugerir devolver una respuesta JSON y mostrar el mensaje dentro de la devolución de llamada exitosa:
fuente
$.ajax
intentarlo$.getScript
. Dentro del script C # del lado del servidor, simplemente pongaalert('Record Deleted');
(sin<script>
etiqueta) y configure ContentType de su script C # entext/javascript
.$.ajax
También podría funcionar, pero no puedo recordar cómo, puede ser que solo necesite cambiardataType: 'script',
. Es posible que ya no necesite el controlador de éxito.$.post
. En este caso, jquery adivina un tipo de datos, luego errores cuando no se analiza . Este es un gotcha realmente desagradable y difícil de encontrar. Lo arreglé configurando el tipo de datos en"text"
.He tenido buena suerte con el uso de múltiples
dataType
s separados por espacios ( jQuery 1.5+ ). Como en:fuente
Simplemente tiene que eliminar el tipo de datos : "json" en su llamada AJAX
fuente
Esto es solo para el registro, ya que me topé con esta publicación cuando buscaba una solución a mi problema que era similar a los OP.
En mi caso, mi solicitud de jQuery Ajax no tuvo éxito debido a la política del mismo origen en Chrome. Todo se resolvió cuando modifiqué mi servidor (Node.js) para hacer:
Literalmente me costó una hora golpear mi cabeza contra la pared. Me siento estúpido ...
fuente
Creo que su página aspx no devuelve un objeto JSON. Su página debería hacer algo como esto (page_load)
Además, intente cambiar su AjaxFailed:
textStatus
debería darte el tipo de error que estás recibiendo.fuente
Me he enfrentado a este problema con una biblioteca jQuery actualizada. Si el método de servicio no devuelve nada, significa que el tipo de devolución sí lo es
void
.Luego, en su llamada Ajax por favor mencione
dataType='text'
.Resolverá el problema.
fuente
Solo tiene que eliminar
dataType: 'json'
de su encabezado si su método de servicio web implementado es nulo.En este caso, la llamada Ajax no espera tener un tipo de datos de retorno JSON.
fuente
Use el siguiente código para asegurarse de que la respuesta esté en formato JSON (versión PHP) ...
fuente
Tuve el mismo problema. Mi problema era que mi controlador estaba devolviendo un código de estado en lugar de JSON. Asegúrese de que su controlador devuelva algo como:
fuente
Tengo el problema similar pero cuando intenté eliminar el tipo de datos: 'json' todavía tengo el problema. Mi error se está ejecutando en lugar del éxito
fuente
Otra cosa que me arruinó las cosas fue usar en
localhost
lugar de 127.0.0.1 o viceversa. Aparentemente, JavaScript no puede manejar solicitudes de uno a otro.fuente
Mira esto . También es un problema similar. Trabajando lo intenté.
No quitar
dataType: 'JSON',
Nota: echo solo formato JSON en el archivo PHP si usa solo php echo su código ajax devuelve 200
fuente
Yo tuve el mismo problema. Fue porque mi respuesta JSON contiene algunos caracteres especiales y el archivo del servidor no estaba codificado con UTF-8, por lo que la llamada Ajax consideró que esta no era una respuesta JSON válida.
fuente
Si siempre devuelve JSON desde el servidor (sin respuestas vacías),
dataType: 'json'
debería funcionar ycontentType
no es necesario. Sin embargo, asegúrese de que la salida JSON ...¡jQuery AJAX lanzará un 'parseerror' en JSON válido pero no serializado!
fuente
Su secuencia de comandos exige un retorno en el tipo de datos JSON.
Prueba esto:
fuente
Intenta seguir
O
Use comillas dobles en lugar de comillas simples en el objeto JSON. Creo que esto resolverá el problema.
fuente