2014-11-17 11 views
17

Ho riscontrato strani problemi con IE (11). Ho semplice codice jQuery:jQuery ajax funziona solo in IE quando il debugger di IE è aperto

$("#my-radio").click(function() { 
    $.ajax({ 
     url: "/my-url", 
    }).error(function(jqXHR, textStatus, errorThrown) { 
     $("#error-summary").text(errorThrown); 
    }); 
}); 

Il fatto è che questo codice funziona perfettamente in tutti i browser tranne IE (nel mio caso ad eccezione di IE 11, non prova nelle versioni precedenti ancora) MA, quando apro IE costruito in javascript debugger per vedere cosa c'è che non va - tutto inizia a funzionare bene. IE effettua una chiamata ajax all'azione del controller, il punto di interruzione nel controller viene colpito. L'azione non restituisce nulla (è di tipo void), contando solo alcune cose. Ho già provato la soluzione plug-in fornita in this thread ma non è stata utile.

AGGIORNAMENTI:

Per dimostrare il problema che ho pubblicato semplice applicazione MVC here. Quando si fa clic sull'immagine, il browser fa richiesta AJAX per questa azione:

public string Hello() 
{ 
    string ip = Request.ServerVariables["REMOTE_ADDR"]; 
    string agent = Request.UserAgent;  

    var request = new Request 
    { 
      IP = ip, 
      Time = DateTime.UtcNow, 
      UserAgent = agent 
    }; 

    _requestsRepository.Add(request); 

    int byIp = _requestsRepository.GetTotalRequestsCountByUser(ip); 
    int total = _requestsRepository.TotalRequests; 

    string message = string.Format("Hello, {0}. This is your {1}th request and {2}th request in total.", ip, byIp, total); 

    return message; 
} 

con questo codice jQuery:

$(document).ready(function() { 
    $("#click-me").click(function() { 
     $.ajax({ 
      url: "/services/hello", 
     }) 

     .success(function (data) { 
      alert(data); 
     }) 

     .error(function (jqXHR, textStatus, errorThrown) { 
      $("#error-summary").text(errorThrown); 
     }); 
    }); 
}); 

Come si può vedere - azione restituisce semplice stringa che viene avvisato in caso di successo. Puoi provare questa pagina in IE. Si noterà che la quantità di richieste non aumenta, perché la richiesta di NO viene effettivamente inviata ma viene comunque chiamato il gestore di eventi success e il messaggio viene avvisato (questo è probabilmente un vecchio messaggio memorizzato dopo qualche richiesta riuscita, sono non sono sicuro). In qualsiasi altro browser la quantità di richieste aumenterà, perché vengono inviate ogni volta che si fa clic sull'immagine. Se si attiva il debugger di IE, verranno inviate anche le richieste. Suggerisco che questa è una sorta di problema relativo alla cache di IE.

+0

È questo l'unico codice o hai console.log da qualche parte? – artm

+0

@artm, è l'unico codice quasi esatto. No 'console.log()' s. – Dmytro

+3

L'ho sperimentato prima (IE9 credo fosse), la pagina stava uscendo vuota in IE, quando ho aperto il debugger della console stava funzionando bene, ho scoperto che 'console.log' stava generando eccezioni indefinite perché console non era aperta. Quando apri la console funziona. Potrebbe essere un altro problema, ma forse correlato. – artm

risposta

25

Sembra che si stiano ottenendo risposte memorizzate nella cache. Gli strumenti di sviluppo possono avere l'opzione Aggiorna sempre dal server attivata, causando solo una nuova risposta quando gli strumenti vengono aperti.

Provare ad aggiungere l'opzione cache nell'oggetto jQuery AJAX options e impostarne il valore su false.

+0

Grazie! Ho avuto lo stesso problema, che sembrava davvero bizzarro fino a questa spiegazione. –

+1

funziona anche per me. Un'altra ragione è console.log. Rimuovi console.log dal tuo codice. –

+0

non è così bizzarro? –