Vanilla ES6 aJax调用意外令牌

时间:2017-05-18 11:05:07

标签: javascript ajax

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

但是我收到以下错误:

  

未捕获的SyntaxError:位于10的JSON中的意外标记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();
    }

这是我得到的响应,如果我只是在{。{}}:

上调试.log
xhr.responseText

1 个答案:

答案 0 :(得分:1)

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

key应为字符串,定义为

  

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

您不应使用任何尾随逗号(请参阅Can you use a trailing comma in a JSON object?)。

对象的正确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();
}

混杂。资源: