2012-03-23 11 views
20

Ho problemi a impostare il responseHype di XHR su "json". Funziona bene se lascio una stringa vuota xml.responseType = ""; ma quando ho impostato a "json" Ottengo la console messaggio di errore SYNTAX_ERR: DOM Exception 12.XMLHttpRequest responseType = "json" che dà errore SYNTAX_ERR: DOM Exception 12

Il file .js:

var xml = new XMLHttpRequest(); 
xml.open("GET", "test.php", true); 
xml.responseType = "json"; 
xml.send(); 

Il. file php:

<?php 
$foo = "{\"key1\":\"val1\", \"key2\":\"val2\"}"; 
echo $foo; 
?> 

Non so cosa sta succedendo .. Qualche idea?

+0

Ok .. dopo ulteriori test, la volontà di accettare tutti i valori menzionati [qui] (https: // developer. mozilla.org/en/XMLHttpRequest) ("documento", "blob", "arraybuffer", "text", "") AD ECCEZIONE per "json". L'ho provato su Chrome 17 e Safari 5.1 – alnafie

+0

Ricorda inoltre che, quando l'output di informazioni da un server inserisce un tipo di contenuto mime corretto nel ritorno. intestazione ("Content-Type: application/json"); dovrebbe risolvere il problema. Inoltre, dovresti usare json_encode invece di creare manualmente il json. print json_encode (array ("key1" => "val1", "key2" => "val2")); – Rahly

+0

A partire da marzo 2014, responseType = "json" è supportato nelle ultime versioni di Chrome, Firefox e Opera. – Kay

risposta

23

responseType immobili per XMLHttpRequest oggetto viene aggiunto nella sua nuova variante XMLHttpRequest Level 2 e che è inclusa nel HTML 5, io non sono sicuro che tutti i browser supportano questo metodo in modo potrebbe essere possibile che si stia utilizzando un browser che non implementa tale metodo

invece di utilizzare responseType è possibile utilizzare seguente codice per ottenere i dati in formato desiderato

var xml = new XMLHttpRequest(); 
xml.open("GET", "test.php", true); 

xml.onreadystatechange = function() { 
    if (xml.readyState != 4) { return; } 

    var serverResponse = JSON.parse(xml.responseText); 
}; 

xml.send(null); 
+0

o utilizza eval (xml.responseText) per sicurezza –

+16

non consiglierei di usare eval, perché fare eval sui dati restituiti dall'utente non è sicuro, se vuoi assicurarti che funzioni anche se il browser in modo nativo non supporta l'analisi di JSON, puoi usare libreria come questo http://www.json.org/js.html, ma grazie per il feedback :) –

+1

Puoi anche racchiudere la chiamata 'JSON.parse' in un blocco' try-catch' per vedere se il 'responseText 'proprietà è stata correttamente analizzata come JSON valido. –

8

Il responseType JSON non è implementato nel WebKit. http://groups.google.com/a/chromium.org/group/chromium-bugs/browse_thread/thread/8107e50e4207eb5a/a5d2c31247feae56?lnk=raot

Aggiornamento 2016/01/03: Come era prevedibile, WebKit ha implementato questa funzionalità nel frattempo.

+3

Il tipo di risposta JSON è stato implementato recentemente in Chromium: http://src.chromium.org/viewvc/blink?view=revision&revision=156290 – kamituel

+0

Questa funzione è stata rilasciata con Chrome 31 nel novembre 2013. – Nayuki

Problemi correlati