2012-03-23 14 views
20

Mam problem z ustawieniem parametru responseType XHR na "json". To działa dobrze, jeśli mogę zostawić to pusty ciąg xml.responseType = ""; ale kiedy ustawić ją na „json” pojawia się komunikat o błędzie konsoli SYNTAX_ERR DOM Exception 12.XMLHttpRequest responseType = "json" podając błąd SYNTAX_ERR: DOM Exception 12

Plik js:

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

. plik php:

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

Nie wiesz, co się dzieje .. Jakieś pomysły?

+0

Ok .. po dalszych badań, będzie przyjmować wszystkie wartości wymienionych [tutaj] (https: // developer. mozilla.org/en/XMLHttpRequest) ("dokument", "blob", "arraybuffer", "text", "") Z WYJĄTKIEM dla "json". Próbowałem go w Chrome 17 i Safari 5.1 – alnafie

+0

Pamiętaj też, że gdy dane wyjściowe z serwera umieszczają odpowiedni typ MIME treści w zwrocie. header ("Content-Type: application/json"); powinien naprawić problem. Powinieneś także używać json_encode zamiast samemu tworzyć json. print json_encode (array ("key1" => "val1", "key2" => "val2")); – Rahly

+0

Od marca 2014 r. ResponseType = "json" jest obsługiwany w najnowszych przeglądarkach Chrome i Firefox oraz w Operze. – Kay

Odpowiedz

23

responseType nieruchomość za XMLHttpRequest obiektu jest dodawany w nowym wariancie XMLHttpRequest Level 2 i która jest objęta HTML 5, nie jestem pewien, wszystkie przeglądarki obsługują tę metodę, więc może się zdarzyć, że używasz przeglądarki, która nie wykona tej metody

zamiast korzystania responseType można użyć następującego kodu, aby uzyskać dane w żądanym formacie

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

lub użyj eval (xml.responseText), aby uzyskać pewność, że –

+16

nie polecam używania eval, ponieważ wykonywanie eval na zwróconych przez użytkownika danych nie jest bezpieczne, jeśli chcesz się upewnić, że to zadziała, nawet jeśli przeglądarka natywnie nie obsługuje parsowania JSON, to możesz użyć biblioteki takiej jak ten http://www.json.org/js.html, ale dziękuję za informację zwrotną :) –

+1

Możesz również otoczyć wywołanie 'JSON.parse' w bloku' try-catch', aby sprawdzić, czy 'responseText Właściwość została poprawnie przeanalizowana jako poprawny JSON. –

8

Typ odpowiedzi JSON nie jest zaimplementowany w pakiecie WebKit. http://groups.google.com/a/chromium.org/group/chromium-bugs/browse_thread/thread/8107e50e4207eb5a/a5d2c31247feae56?lnk=raot

Aktualizacja 2016-01-03: Jak można się było spodziewać, WebKit zaimplementował tę funkcję w międzyczasie.

+3

Typ odpowiedzi JSON został ostatnio zaimplementowany w Chromium: http://src.chromium.org/viewvc/blink?view=revision&revision=156290 – kamituel

+0

Ta funkcja została wydana z Chrome 31 w listopadzie 2013. – Nayuki

Powiązane problemy