Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 香草ES6 aJax调用意外令牌_Javascript_Ajax - Fatal编程技术网

Javascript 香草ES6 aJax调用意外令牌

Javascript 香草ES6 aJax调用意外令牌,javascript,ajax,Javascript,Ajax,尝试从服务器返回一些JSON代码,以便我可以在JavaScript中操作它 但是,我得到了以下错误: 未捕获的SyntaxError:JSON中位置10处的意外标记m 这是我的密码: getJSON(url, success) { let query = [ 'cars', 'vans', 'bikes' ]; var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() {

尝试从服务器返回一些JSON代码,以便我可以在JavaScript中操作它

但是,我得到了以下错误:

未捕获的SyntaxError:JSON中位置10处的意外标记m

这是我的密码:

getJSON(url, success) {
      let query = [ 'cars', 'vans', 'bikes' ];

      var xhr = new XMLHttpRequest();
      xhr.onreadystatechange = function() {
        if (xhr.readyState === 4) {
          if (xhr.status === 200) {
            success(JSON.parse(xhr.responseText));
          } else {
            exit(xhr.responseText);
          }
        }
      };
      xhr.open('GET', url);
      xhr.send();
    }
这是我在控制台上得到的响应。记录
xhr.responseText

[
  {
    make: 'VOLVO'
  },
  {
    make: 'AUDI'
  },
  {
    make: 'VOLKSWAGON'
  },
]

您试图解析的对象是有效的JavaScript对象,但不是有效的JSON

s应该是字符串,定义为

零个或多个Unicode字符的序列,用双引号括起来,使用反斜杠转义

不应使用任何尾随逗号(请参阅)

对象的正确JSON字符串应为:

let s = '[ {"make": "VOLVO"}, {"make": "AUDI"}, {"make": "VOLKSWAGON"} ]';
可以修复代码以检测此问题:

getJSON(url, success) {
    let query = [ 'cars', 'vans', 'bikes' ];
    let xhr = new XMLHttpRequest();

    xhr.onreadystatechange = function() {
        if (xhr.readyState === 4) {
            if (xhr.status === 200) {
                try {
                    let parsedJSON = JSON.parse(xhr.responseText);
                    success(parsedJSON);
                } catch (e) {
                    if (e instanceof SyntaxError === true) {
                        // Problem with the format of the JSON string.
                    } else {
                        // Other error
                    }
                }
            } else {
                exit(xhr.responseText);
            }
        }
    };

    xhr.open('GET', url);
    xhr.send();
}

杂项。资源:


这不是有效的JSON。JSON不能有尾随逗号,并且总是要求属性名和字符串使用双引号。糟糕,我错了。我弄乱了JSONY,您可能想捕捉错误,以便在服务器返回无效数据时正常失败。您需要将字符串括在引号中。您的“make”键缺少开始引用,这是控制台告诉您的。它期望一个
,但它发现一个
m
。投票关闭,因为这是一个数据问题,而不是编码问题。