2013-07-22 13 views
9

Sintesi di problemaJquery ajax errore casuale in Chrome solo

Dopo il login con Chrome tramite autenticazione basata su form. La pagina di destinazione come returnUrl eseguirà l'errore jQuery ajax senza colpire il server. status code = 0 e message = "error". (Poco utile). Dopo aver provato Firefox e non essere in grado di replicare il problema, sto iniziando a pensare che Chrome sia il problema. Cancellare le cache, chiudere e riaprire non si risolve. L'articolo più vicino che riesco a trovare è questo. jQuery Ajax - Status Code 0? Tuttavia, l'URL è relativo, /Test

Un altro SO articolo: jquery ajax problem in chrome

più lunga descrizione

sto ottenendo un errore con jQuery Ajax. Sembra che subito dopo l'accesso con l'autenticazione dei moduli; la pagina di destinazione (returnUrl), avrà l'errore JS. Quindi, dopo aver aggiornato la pagina (F5), lo script funzionerà (principalmente). Anche se non si utilizza F5, la navigazione nella stessa pagina tramite un collegamento consentirà al JS di funzionare (principalmente). Quindi subito dopo il login è il mio principale percorso di test.

Inoltre, la navigazione in un'altra scheda per l'azione /Test direttamente, funziona. La scheda originale presenta ancora errori fino a quando non la navigo o la aggiorna come menzionato.

Ho avuto momenti in cui la navigazione o l'aggiornamento f5 non interrompe l'errore. Quindi l'uso di "principalmente" nel paragrafo di apertura.

Dopo un giorno e un po 'di non riuscire a trovare una solida motivazione attraverso la ricerca, debugger JS, semplificazione del codice e vari scenari; Devo chiedere un aiuto.

JavaScript errore valutazioni

Il più ho potuto capire è un status code of 0 ed un error message of "error".

Software e versioni

ASP.NET MVC 3 
Chrome v28.0.1500.72 m 
jQuery v1.8.3 
AttributeRouting 

Con Chrome, mi hanno anche cercato di svuotare la cache e CTRL + F5.

MVC
Ho un'azione protetta da un [Authorize(Roles = "Admin")] disattivazione di questo attributo viene visualizzato per risolvere il mio problema e poi in seguito, non è. Quindi, scusa se qualche precedente affermazione è confusa. lol, a corto di capelli!

[GET("Test")] 
public ActionResult Test() 
{ 
    Console.WriteLine("Test"); 
    return new EmptyResult(); 
} 

Tutti i file di script javascript non sono dietro una cartella che è protetto con autenticazione basata su form.

jQuery doc.ready

Ho un evento di errore jQuery che ho usato per mettere in pausa il debugging per vedere il contenuto degli oggetti.

//-- while I am using this method, I have also used the `error: ` 
//-- part of $.ajax with the same result. 
    $(function() 
    { 
     $(document).ajaxError(function (event, jqxhr, settings, exception) 
     { 
      Debug.Log("event: " + event); 
      Debug.Log("jqxhr: " + jqxhr.responseText); 
      Debug.Log("settings: " + settings); 
      Debug.Log("exception: " + exception); 
     }); 
    }); 

Ho un metodo jQuery che carica utilizzando i seguenti eventi.Mentre lo script followig sembra che sbatterebbe il server. C'è una logica di temporizzazione per assicurarsi che colpisca solo ogni 5 secondi.

$(document).on('mousemove','*',function(e){ TestMethod(this,e,'mousemove');}); 

metodo Javascript

Questa è la mia chiamata AJAX, che è così semplice come posso farlo.

function TestMethod(sender, e, eventTrgger) 
    { 
     $.ajax(
     { 
      type: "GET", 
      url: '/Test', 
      dataType: 'html', 
      success: function (html) 
      { 
       //-- tested with nothing here. 
      } 
     }); 
    } 

Fiddler

Quando si verifica l'errore, Fiddler non mostra una richiesta GET, il che significa che il server non è colpito. Inoltre, inserisco un breakpoint del debugger nell'azione confermando che l'azione non viene colpita.

In aggiunta: Poiché la chiamata ajax avviene ogni 5 secondi. Mentre sei sulla pagina e vedi lo stato-0 e l'errore- "errore"; Svuoto la cache e senza aggiornare la pagina, Chrome e la richiesta di ajax iniziano a funzionare. Per la cronaca, i miei settaggi della cache di Chrome sono impostati su un numero di cache ridotto a quello che posso configurare.

+0

Il fatto che la rimozione di 'AuthorizeAttribute' lo faccia funzionare, e la nozione che" il server non viene colpito "sembra essere completamente disgiunto. –

+0

Ho disabilitato l'attributo proprio ora, ma ho anche navigato nel modulo di login con un returnURL pronto. Il problema si è verificato. Ho aggiornato la Q per indicare che dopo averlo letto .... provando così tanti percorsi diversi. –

+0

Sto riscontrando un problema molto simile. Le richieste si interrompono dopo l'aggiornamento di alcune pagine e penso che abbia a che fare con lo stesso problema. È stato risolto in Chrome 29? –

risposta

8

Il problema sembra essere un bug con il modo in cui Chrome 28 gestisce la memorizzazione nella cache per le richieste GET. La versione 27 funziona correttamente, così come le richieste POST nella versione 28.

È possibile risolvere il problema impostando la proprietà 'cache' su false nella chiamata $ .ajax().

+0

Bene. Fin qui tutto bene! Continuerò a testarlo oggi. Ho sostituito il mio console.log con un avviso. Quindi saprò presto se questa soluzione funziona. Saluti per averlo trovato. Forse un collegamento ipertestuale al problema potrebbe essere aggiunto alla risposta? –

+0

Ho appena avuto questo problema in 29.0.1547.65 su un mac, http 0 in risposta a $ .post chiamate (quindi sicuramente post http). Charles non ha mostrato nessuna richiesta http. Iniziato il debugging attraverso jquery cercando di scoprire se ci fosse un errore sottostante su xhr. Mi ha fatto impazzire per un po ', ma alla fine ho aggiunto? R = "+ Math.random() al mio URL (che era relativo - /Keepalive.ashx) e lo http statusCode 0 è andato via e tutto sta funzionando di nuovo bene – agrath

+0

Ho appena avuto questo bug anche in chrome 29, sembra che sia stato risolto in chrome 30. Impostando cache su false l'ho risolto in chrome 29 per me – Xeli

Problemi correlati