首页 文章

Aurelia | json解析无法解决的异常?

提问于
浏览
0

所以我想按照aurelia docs提出这个帖子请求:http://aurelia.io/hub.html#/doc/article/aurelia/fetch-client/latest/http-services/3

这是请求:

httpClient.configure(config => {
        config
            .withBaseUrl(baseUrl)
    });
this.client = httpClient;
this.client.fetch(`/api/Register/${userName}`, {
            method: "post",
            body: json(loginInformation),
            headers: {
                'Access-Control-Allow-Origin' : '*',
                'Accept': 'application/json'
            }
        }) .then(response => this.safelyParseJSON(response))
            .then(data => this.setup(data));

其中safetyParseJSON是:

safelyParseJSON(response) {
        var parsed
            try {
                parsed = response.json();
            } catch (e) {
            }

        return parsed 
    }

但我一直收到这个错误:

“uncaught(在promise中)SyntaxError:JSON输入的意外结束”

任何人都知道我做错了什么?

注意:我仅在从服务器接收404/500时收到此错误,如果结果正常,则此方法有效 .

注意2:我在try-catch中包装此函数但是这仍然不起作用,它不会捕获异常 .

注3:我试图替换这一行:

parsed = response.json();

用这一行:

parsed = JSON.parse(response);

但是响应总是未定义的 .

2 回答

  • 1

    在调用 .json() 之前检查响应的状态:

    .then(response => {
      if (response.ok) {
        return response.json().then(data => this.setup(data));
      }
      return Promise.reject(response.text());
    });
    
  • 2

    我最后使用了Jeremy Danyow的回答,只做了一个小改动:

    .then(response => {
     if (response.ok && response.status === 200) {
       return response.json().then(data => this.setup(data));
     }
     return Promise.reject(response.text());
    });
    

    在我的情况下添加response.status检查是必要的,因为对于状态代码204(无内容),response.ok也是如此 .

相关问题