jQuery Ajax (beforeSend et complet) fonctionne correctement sur FireFox mais pas sur IE8 et Chrome
J'utilise de l'ajax de jQuery version 1.4.1 dans mon application MVC (mais la question que je suis en discussion a été de même avec l'ancienne version jQuery 3.2.1) ainsi, à vérifier lors de l'enregistrement du client si le nom d'utilisateur est déjà enregistré. Que l'utilisateur clique sur "Vérifier la Disponibilité", je suis en train de montrer une image complexe à la place du bouton (en fait cacher le bouton vérifier et montrer l'image) lors de la vérification de la disponibilité sur le serveur, puis l'affichage d'un message. C'est une Synchronisation appel (async: false) et j'ai utilisé beforeSend: et complète: pour afficher et masquer l'image complexe et le bouton coche. Cette chose fonctionne bien sur Firefox, mais sous IE 8 et Chrome, ni le occupé de l'image apparaissent ni le bouton vérifier les peaux plutôt le bouton est resté pressé comme toute chose a pendu. Disponibles et non disponibles les messages s'affichent correctement. Ci-dessous le code:
HTML dans un Contrôle Utilisateur (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" />
Sur le dessus de ce contrôle utilisateur, je suis un lien externe fichier javascript qui a le code suivant:
$(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);
}
});
}
si vous définissez isvalid à true ou à false, êtes-vous sûr que vous pouvez le comparer avec '1'. si(disponible) devrait être suffisant... Ce ne sera pas répondre à votre question 🙂
Merci, oui j'ai remarqué que les et tout en essayant de trouver le problème, j'ai aussi corrigé cette chose, mais comme prévu, il n'a pas du tout différent. Je vais mettre à jour le code ci-dessus avec ce changement.
OriginalL'auteur Farhan Zia | 2010-02-09
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé la réponse à ma question. C'était en fait la synchronisation d'appel (async = false) qui était IE fou. J'ai supprimé cette et ajusté le code et tout fonctionne bien maintenant.
Zia Merci beaucoup frère! 🙂
J'ai essayé sur mon code et il fonctionne. Merci !!! Mais, de toute idée sur la façon de retirer async fait-il ?
OriginalL'auteur Farhan Zia
Point à Noter: async=false est déprécié que de jQuery 1.5
Devrait être l'aide complète d'() rappel de la place.
OriginalL'auteur Eshmeister