Estoy usando jQuery ajax versión 1.4.1 en mi aplicación MVC (aunque el problema que estoy discutiendo era el mismo con la versión anterior de jQuery 3.2.1) también, para verificar durante el registro del cliente si el nombre de usuario ya está registrado. Cuando el usuario hace clic en el botón "Verificar disponibilidad", estoy mostrando una imagen ocupada en lugar del botón de verificación (en realidad, oculta el botón de verificación y muestra la imagen) mientras verifico la disponibilidad en el servidor y luego se muestra un mensaje. Es una llamada Sync (async: false) y utilicé beforeSend: y complete: para mostrar y ocultar la imagen ocupada y el botón de verificación. Esto funciona bien en Firefox, pero en IE 8 y Chrome, ni aparece la imagen ocupada ni el botón de verificación se oculta, sino que el botón de verificación permanece pulsado cuando todo se cuelga. Sin embargo, los mensajes disponibles y no disponibles aparecen correctamente. A continuación se muestra el código:jQuery Ajax (antes de enviar y completar) funciona correctamente en Firefox pero no en IE8 y Chrome
HTML en un control de usuario (ascx):
<div id="available">This Username is Available</div>
div id="not_available">This Username is not available</div>
<input id="txtUsername" name="txtUsername" type="text" size="50" />
<button id="check" name="check" type="button">Check Availability</button>
<img id="busy" src="/Content/Images/busy.gif" />
En la parte superior de este control de usuario, estoy Vinculación de un archivo JavaScript externo que tiene el siguiente código:
$(document).ready(function() {
$('img#busy').hide();
$('div#available').hide();
$('div#not_available').hide();
$("button#check").click(function() {
var available = checkUsername($("input#txtUsername").val());
if (available == "1") {
$("div#available").show();
$("div#not_available").hide();
}
else {
$("div#available").hide();
$("div#not_available").show();
}
});
});
function checkUsername(username) {
$.ajax({
type: "POST",
url: "/SomeController/SomeAction",
data: { "id": username },
timeout: 3000,
async: false,
beforeSend: function() {
$("button#check").hide();
$("img#busy").show();
},
complete: function() {
$("button#check").show();
$("img#busy").hide();
},
cache: false,
success: function(result) {
return result;
},
error: function(error) {
$("img#busy").hide();
$("button#check").show();
alert("Some problems have occured. Please try again later: " + error);
}
});
}
¿Qué le pasó a la comunidad? 18 personas vieron esta pregunta, pero nadie respondió incluso después de 2 días. ¿Es realmente tan complicado o no lo pregunté correctamente? –
si establece isvalid en verdadero o falso, ¿está seguro de que puede compararlo con '1'? si (disponible) debería ser suficiente ... Esto no responderá a tu pregunta :-) – Kennethvr
Gracias, sí, me di cuenta de que, al tratar de descifrar el problema real, también lo solucioné, pero como era de esperar, no hizo ningún diferente. Actualizaré el código anterior con este cambio. –