open - problema jquery ajax en cromo
fancybox 3 (7)
Acabo de ver que esta pregunta ha recibido muchas opiniones, y sigue abierta. Lo había olvidado completamente y espero que esto me permita cerrarlo.
Establecer el argumento de tipo de datos en nada, o incluso eliminar completamente el argumento de tipo de datos resolverá el problema.
En mi ejemplo, estoy devolviendo una vista representada (un fragmento de html en cadena) y en este código estoy especificando el tipo de datos a json, cuando realmente no lo es. La mayoría de los otros navegadores parecen ignorar el tipo de datos si es incorrecto y seguir con vida, lo que me permite agregar el resultado html.
Chrome arroja un error. El texto de estado es correcto, el código de estado es 200, porque la solicitud real de ajax fue bien. El problema no tiene nada que ver con la solicitud en sí, el problema es que los datos devueltos no son lo que le dije a Chrome que sería.
Así que Chrome se rompe. Si elimino completamente el argumento de tipo de datos, Chrome se da cuenta de qué son los datos cuando los obtiene. Si configuro el argumento de tipo de datos a "html", también funciona bien.
Para resumir, el problema no es Chrome. Soy yo. Porque soy tonto así. Estoy marcando esto como la respuesta a esta pregunta, ya que responde al ejemplo que presenté en la pregunta original.
En los comentarios, otros han descrito otras situaciones en las que esta solución probablemente no ayudará.
Tengo el siguiente código jquery corriendo en mi página muy bien en FF e IE, pero Chrome parece estar volviendo loco.
en FF e IE la llamada se realiza y el resultado se agrega al div. en Chrome, llama ajaxfailed en el fracaso.
el XMLHttpRequest pasado a la función AjaxFailed tiene un código de estado de "200" y el statusText es "ok". el readystate es 4 y el responseText está configurado con los datos que deseo adjuntar al div. básicamente, de lo que puedo ver es que llama al método de falla, pero no está fallando. Lo he intentado con solicitudes de obtención y publicación y siempre se rompe en cromo.
function getBranchDetails(contactID, branchID) {
$.ajax({
type: "GET",
url: urlToRequestTo,
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: branchDetailsSuccess,
error: AjaxFailed
});
}
function branchDetailsSuccess(result) {
$("#divBranchControl").empty();
$("#divBranchControl").append(" " + result);
$("#branchDiv").tabs();
}
function AjaxFailed(result) {
alert("FAILED : " + result.status + '' '' + result.statusText);
}
En la operación AJAX simplemente agregue: async: false
después de datatype: "json"
, y eso debería resolver su problema. Chrome tiene problemas para manejar llamadas asincrónicas.
Intente configurar el parámetro de datos en "".
Para las solicitudes GET
, el parámetro de datos se agrega a la URL. No estoy seguro de por qué Chrome tendría un problema con eso, pero vale la pena intentarlo :)
No sé si todavía tienes este problema, pero hoy me encontré con un error similar. Estaba llamando a una página aspx para devolver una cadena con responseText y Chrome nunca devolvió nada. Resultó que tenía una Response.Close en mi página aspx que funcionaba en todos lados pero que probablemente no enviaba algunos encabezados obligatorios o algo a Chrome y / o Safari. Espero que ayude a alguien.
Prueba esto para tener éxito:
success: function(response) { branchDetailsSuccess(response); },
Use el método POST en servlet y cambie el type:POST
en $.ajax
.
después de un día y medio superado, entonces puedo presentar ...
function getBranchDetails(contactID, branchID) {
$.ajax({
type: "GET",
url: urlToRequestTo,
data: "",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: branchDetailsSuccess,
error: branchAjaxFailed
});
}
function branchDetailsSuccess(result) {
$("#divBranchControl").empty();
$("#divBranchControl").append(" " + result);
$("#branchDiv").tabs();
}
function branchAjaxFailed(result) {
if (result.status == 200 && result.statusText == "OK") {
//this is here only because chrome breaks on this method only for no reason whatsoever.
//chrome sees the request as failed, but everything happens fine...
branchDetailsSuccess(result.responseText);
}
else {
alert("FAILED : " + result.status + '' '' + result.statusText);
}
}