XMLHttpRequest responseType ="json"给出错误SYNTAX_ERR:DOM异常12

aln*_*fie 22 javascript ajax xmlhttprequest

我在将XHR responseType设置为"json"时遇到问题.如果我把它留空字符串它工作正常xml.responseType = "";但是当我将它设置为"json"时,我得到控制台错误消息SYNTAX_ERR:DOM异常12.

.js文件:

var xml = new XMLHttpRequest();
xml.open("GET", "test.php", true);
xml.responseType = "json";
xml.send();
Run Code Online (Sandbox Code Playgroud)

.php文件:

<?php
$foo = "{\"key1\":\"val1\", \"key2\":\"val2\"}";
echo $foo;
?>
Run Code Online (Sandbox Code Playgroud)

不知道发生了什么......有什么想法吗?

Sak*_*tel 30

responseTypeXMLHttpRequest对象的属性被添加到其新的变体XMLHttpRequest Level 2中并且包含在其中HTML 5,我不确定所有浏览器是否都支持此方法,因此您可能正在使用不实现该方法的浏览器

而不是使用responseType您可以使用以下代码来获取所需格式的数据

 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);
Run Code Online (Sandbox Code Playgroud)

  • 我不建议使用eval,因为对用户返回的数据执行eval是不安全的,如果你想确保即使浏览器本身不支持JSON解析也能工作,那么你可以使用像这样的库http:// www .json.org/js.html,但感谢您的反馈:) (17认同)
  • 您还可以在`try-catch`块中包围`JSON.parse`调用,以查看`responseText`属性是否被正确解析为有效的JSON. (2认同)
  • 另外需要注意的是,JSON.parse()比eval()更轻量级,因为它不必担心函数和实际执行代码.JSON.parse()结合JSON.stringify()是非常宝贵的工具. (2认同)

Pet*_*tai 8

WebKit中未实现JSON responseType. http://groups.google.com/a/chromium.org/group/chromium-bugs/browse_thread/thread/8107e50e4207eb5a/a5d2c31247feae56?lnk=raot

更新2016-01-03:正如可以预料的那样,WebKit在此期间实现了此功能.

  • 最近在Chromium中实现了JSON响应类型:http://src.chromium.org/viewvc/blink?view =revision&latest = 156290 (3认同)