2010-02-09 22 views
9

Sto usando jQuery ajax versione 1.4.1 nella mia applicazione MVC (anche se il problema di cui sto discutendo era lo stesso con la vecchia versione jQuery 3.2.1), per verificare durante la registrazione del cliente se il nome utente è già registrato. Mentre l'utente fa clic sul pulsante "Verifica disponibilità", visualizzo un'immagine occupata al posto del pulsante di controllo (in realtà nasconde il pulsante di controllo e mostra l'immagine) mentre controlla la disponibilità sul server e quindi visualizza un messaggio. È una chiamata di sincronizzazione (async: false) e ho usato beforeSend: e complete: per mostrare e nascondere l'immagine occupata e il pulsante di controllo. Questa cosa funziona bene su Firefox, ma in IE 8 e Chrome, né l'immagine occupata appare né il pulsante di controllo si nasconde, piuttosto il pulsante di controllo è rimasto premuto mentre l'intera cosa si è impiccata. I messaggi disponibili e non disponibili vengono visualizzati correttamente. Di seguito è riportato il codice:jQuery Ajax (beforeSend e complete) funziona correttamente su FireFox ma non su IE8 e Chrome

HTML in un controllo utente (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" />&nbsp; 

<button id="check" name="check" type="button">Check Availability</button> 

<img id="busy" src="/Content/Images/busy.gif" /> 

Sulla cima di questo controllo utente, stanno collegando un file JavaScript esterno che ha il seguente codice:

$(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); 

     } 

    }); 

} 
+0

Cosa è successo alla comunità? 18 persone hanno visto questa domanda, ma nessuno ha risposto anche dopo 2 giorni. È davvero così complicato o non l'ho fatto correttamente? –

+0

se si imposta isvalid su true o false, sei sicuro di poterlo confrontare con '1'. se (disponibile) dovrebbe essere sufficiente ... Questo non risponderà alla tua domanda :-) – Kennethvr

+0

Grazie, sì ho notato che e mentre cercavo di capire il vero problema, ho anche corretto questa cosa ma come previsto - non ha fatto nulla diverso. Aggiornerò il codice sopra con questo cambiamento. –

risposta

14

Ho trovato la risposta alla mia domanda. In realtà era la chiamata di sincronizzazione (async = false) che stava facendo impazzire IE. L'ho rimosso e ho modificato il codice e ora tutto funziona correttamente.

+11

sai che puoi contrassegnare la tua risposta come "corretta", cercando così di rispondere ad alcune domande auto-risposte, i commenti del proprio autore? :) –

+0

@ Farhan Zia Grazie mille fratello! :) –

+0

Ho provato questo sul mio codice e funziona. Grazie !!! Ma, qualche idea su come rimuovere async lo fa funzionare? – chaitu

1

punto da notare: async = false è deprecato come di jQuery 1.5

dovrebbe usare completa callback(), invece.

+1

Questo è sbagliato. async = false non è deprecato da jQuery 1.5. – HorseloverFat

Problemi correlati