2010-04-27 13 views
6

ho il seguente chiamata AJAX che funziona perfettamente in Firefox e Chrome, ma non IE:

function getAJAXdates(startDate, numberOfNights, opts) { 

    var month = startDate.getMonth() + 1; 
    var day  = startDate.getDate(); 
    var year = startDate.getFullYear(); 
    var d  = new Date(); 

    var randNum = Math.floor(Math.random()*100000000); 

    $.ajax({ 
     type  : "GET", 
     dataType : "json", 
     url   : "/availability/ajax/bookings?rand="+randNum,  
     cache  : false, 
     data  : 'month='+month+'&day='+day+'&year='+year+'&nights='+numberOfNights, 
     contentType : 'application/json; charset=utf8', 
     success  : function(data) { 
      console.log('@data: '+data); 
      insertCellData(data, opts, startDate); 
     }, 
     error:function(xhr, status, errorThrown) { 
      console.log('@Error: '+errorThrown); 
      console.log('@Status: '+status); 
      console.log('@Status Text: '+xhr.statusText); 
     } 
    }); 
} 

So per certo che tutti i le variabili stanno passando il giusto contenuto e $ .ajax sta effettivamente superando tutti i parametri/valori.

Questo è ciò che ottengo in caso di errore:

LOG: @Error: undefined LOG: @Status: ParserError LOG: @Status Testo: OK

Sono consapevole del problema cache IE e implementato un parametro casuale per eliminarlo.

Ecco il JSON torno (io sono in grado di vederla con Charles)

{ 
    "availability":[ 
     { 
     "inventory_id":"5", 
     "booking_id":"21", 
     "start_date":"05-01-2010", 
     "number_nights":4, 
     "text":"deFrancisco, Martin - $500.00 ACTIVE", 
     "type":"BOOKING" 
     } 
    ] 
} 

Infine queste sono le intestazioni che vengono inviati indietro dal backend:

header('Content-Type: application/json; charset=utf8'); 
header("Cache-Control: no-cache"); 
header("Expires: 0"); 
header('Access-Control-Max-Age: 3628800'); 
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE'); 

Eventuali idee?

risposta

4

vorrei commentare il contentType e aggiungere dataType: "json"

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

dataType: Il tipo di dati che vi aspettate dal server.

contentType: Quando si inviano dati al server, utilizzare questo tipo di contenuto.

si sta specificando che si sta inviando json, ma non lo si è - forse questo è il problema?

+0

ho aggiunto contentType per vedere se risolve il problema ma non funziona anche senza. grazie – Sam3k

1

La maggior parte delle volte gli errori di analisi specifici IE sono causati da virgole extra. Ad esempio, [1, 2, 3,] è valido in FF ma non in IE. Ad ogni modo, dovresti incollare la risposta JSON, è impossibile dire il problema senza quello.

+0

l'oggetto JSON sembra essere ok. L'ho aggiunto alla mia domanda iniziale in modo da poter dare un'occhiata. – Sam3k

0

Verificare se la pagina restituisce OK o se restituisce 'OK'. Solo 'OK' è JSON valido. Utilizzare uno strumento come JSONLint per verificare il valore che proviene dalla richiesta.

+0

il JSON ha superato il test JSONLint. Ricevo un "HTTP/1.1 200 OK" – Sam3k

0

Cosa succede se si digita semplicemente alert(data); o var myObject = eval('(' + data + ')');?

E se si chiama la funzione direttamente dal browser digitando sulla barra URL tua chiamata AJAX con tutti i parametri di "get" (& param1 = param1value & param2 = ...)? Dovresti essere in grado di leggere la risposta.

Qualcosa nella risposta JSON sta facendo impazzire IE.

0

Quale versione di jQuery stai usando?

Se si controlla il codice di jquery, viene generato parsererror quando viene chiamato jQuery.httpData().Ecco il codice da jquery:

if (status === "success") { 
    // Watch for, and catch, XML document parse errors 
    try { 
    // process the data (runs the xml through httpData regardless of callback) 
    data = jQuery.httpData(xhr, s.dataType, s); 
    } catch(err) { 
    status = "parsererror"; 
    errMsg = err; 
    } 
} 

Forse jQuery.httpData() vale la pena guardare. Cioè, puoi controllare se jQuery.parseJSON viene chiamato e se restituisce effettivamente un oggetto.

if (typeof data === "string") { 
    // Get the JavaScript object, if JSON is used. 
    if (type === "json" || !type && ct.indexOf("json") >= 0) { 
    console.log(data); //add this 
    data = jQuery.parseJSON(data); 
    console.log("data parsed successfully"); //add this 
1

Ho anche riscontrato un problema simile a $ .ajax() (jquery v1.4.2). Non funziona in IE8, mentre in Firefox funziona.

Tuttavia, ho notato dalla barra degli strumenti di debug di IE8 che la mia pagina è in modalità strane. Quindi, lo faccio forzatamente per funzionare in modalità standard inserendo questo doctype <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">. All'improvviso funziona $ .ajax()!

Non capisco davvero le stranezze/modalità standard, ma la parola "standard" sembra in qualche modo più vicina a Firefox o Chrome, piuttosto che a IE. Ecco come ho avuto l'idea.

@see http://en.wikipedia.org/wiki/Quirks_mode

Problemi correlati