2012-03-23 3 views
20

XHR 응답 유형을 "json"으로 설정하는 데 문제가 있습니다. 내가 빈 문자열 xml.responseType = "";두고 있지만 경우 잘 작동 내가 설정 한 경우에 "JSON"나는 콘솔 오류 메시지 SYNTAX_ERR 수 : DOM 예외 (12)XMLHttpRequest responseType = "json"오류 발생 SYNTAX_ERR : DOM Exception 12

을의 .js 파일 :

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

. PHP 파일 :

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

무슨 일이 일어나는지 확실하지 않습니다. 아이디어가 있습니까?

+0

확인을 원하는 형식으로 데이터를 얻기 위해 다음과 같은 코드를 사용할 수 있습니다 responseType를 사용

. mozilla.org/en/XMLHttpRequest) ("document", "blob", "arraybuffer", "text", "") "json"제외. 나는 Chrome 17 및 Safari 5.1에서 이것을 시도했습니다. – alnafie

+0

또한 서버에서 정보를 출력 할 때 적절한 콘텐츠 MIME 유형을 반환해야합니다. 헤더 ("Content-Type : application/json"); 문제를 해결해야합니다. 또한 json을 스스로 제작하는 대신 json_encode를 사용해야합니다. print json_encode (array ("key1"=> "val1", "key2"=> "val2")); – Rahly

+0

2014 년 3 월부터 최신 Chrome 및 Firefox와 Opera에서 responseType = "json"이 지원됩니다. – Kay

답변

23

responseType, 난 당신이 그 방법을 구현하지 않는 브라우저를 사용하고 있는지가 가능할 수 있도록 모든 브라우저가이 메소드를 지원하지 확신 // 개발자 : 대신 더 테스트 후에는 [여기] (HTTPS 언급 한 모든 값을 받아 들일 것입니다 ..

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

또는 eval (xml.responseText) 확실하게 가야한다 –

+16

사용자가 반환 한 데이터에 대한 평가를 수행하는 것이 안전하지 않기 때문에 eval을 사용하지 않는 것이 좋습니다. 브라우저가 기본적으로 JSON 구문 분석을 지원하지 않아도 작동하는지 확인하려면 라이브러리를 사용할 수 있습니다. this http://www.json.org/js.html, 피드백을 주셔서 감사합니다 :) –

+1

'try-catch' 블록에서'JSON.parse' 호출을 감싸서'responseText '속성이 유효한 JSON으로 올바르게 파싱되었습니다. –

8

JSON 응답 유형이 WebKit에 구현되어 있지 않습니다. http://groups.google.com/a/chromium.org/group/chromium-bugs/browse_thread/thread/8107e50e4207eb5a/a5d2c31247feae56?lnk=raot

업데이트 2016-01-03 : 예상대로 WebKit은이 기능을 구현했습니다.

XMLHttpRequest 개체의 속성이 HTML 5에 포함 된 새로운 변종 XMLHttpRequest Level 2 및 추가됩니다
+3

최근 Chromium에서 JSON 응답 유형이 구현되었습니다. http://src.chromium.org/viewvc/blink?view=revision&revision=156290 – kamituel

+0

이 기능은 2013 년 11 월에 Chrome 31과 함께 출시되었습니다. – Nayuki