2013-04-12 9 views
5

data una chiamata AJAX come ad esempio:jquery 1.9 .ajax() tipo di dati predefinito modificato?

$.ajax(
{ 
    url:"MyWebService.blah", 
    data: {"data":"awesome"}, 
    success : function(responseText) 
    { 
     var myJsonObj = $.parseJSON(responseText); 
     //do stuff with myJsonObj 
    } 
}); 

Questo stava funzionando benissimo. Ho aggiornato jQuery alla versione 1.9 di oggi (ero in versione 1.6 per un po ') come possibile correzione per Safari all'improvviso non supportando varie funzionalità di attivazione (qualcosa su eventLayer.X non è più supportato) e ora tutte le chiamate ajax stanno lanciando il seguente errore javascript:

Uncaught Syntax Error: Unexpected token o 

Dopo un po 'di ricerca e di alcuni test, ho scoperto che "responseText" nel mio codice di cui sopra è ormai un oggetto JSON, non una stringa. Quindi l'errore ha senso, ma sto cercando di capirlo. JQuery ha davvero cambiato il tipo di reso predefinito? Ho controllato la documentazione:

http://api.jquery.com/jQuery.ajax/ 

e dataType è impostato su "Intelligent Guess". Posso vedere come potrebbe essere conveniente, ma anche a me non piace.

Così qui sono le mie domande:

  1. Si tratta di una nuova (ish) cambiamento di jQuery?
  2. Era la versione 1.9 che ha fatto questo, o è stato così prima e io sono un fossile che usa 1.6?
  3. Quali sono alcuni suggerimenti per gestire questo e il mio codice "a prova di futuro"?

Questo è un cambiamento piuttosto fondamentale che interessa molto codice. Passerò attraverso il mio codice e rimuoverò qualsiasi istanza di analisi dei dati restituiti su JSON, ma tutta questa cosa è un po 'snervante. Mi sono sbagliato a non specificare un dataType? Suppongo che sia una buona pratica applicare un dataType invece di fare affidamento sul default, ma ... wow. Sono solo su questo, o era un po 'presuntuoso di un cambiamento da parte di jQuery?

+0

http://jsfiddle.net/5e9KC/ Funziona bene qui ... hmm cos'è questo 'o'? Deve esserci qualcos'altro che cambia qualcosa qui –

+0

vedere per curCSS essere deprecato –

+0

@mcpDESIGNS il tuo violino non "funziona" perché non fa nulla. Ovviamente il javascript dovrebbe essere effettivamente eseguito per lanciare l'errore. arrostito, "curCSS?" Non sto usando quello nel mio codice, perché sarebbe un problema? – AceCorban

risposta

6

jQuery rileva automaticamente ciò che il dataType è basato su ciò che è stato restituito se non è stato impostato alcun tipo di dati. Molto probabilmente 1.9 ha appena migliorato quella rilevazione per rilevare correttamente quello che stai restituendo come json. È meglio dare sempre un tipo di dati per garantire sempre risultati coerenti.

+0

Quindi stai dicendo che "Intelligent Guess" è stato l'intento del tipo di ritorno ajax per un po '(forse anche in 1.6), ma che ora sta facendo un lavoro migliore? – AceCorban

+0

Sì. Sta solo facendo un lavoro migliore a Indovina quali sono i dati. –

+0

Abbastanza giusto. Grazie. – AceCorban

Problemi correlati