Angular2 Http处理空响应报错:如何判断响应体非空?
处理Angular Http请求中空响应体的JSON解析错误
这个问题我之前开发时也踩过坑!当接口返回空响应体(_body: "")时,直接调用x.json()肯定会触发SyntaxError,毕竟空字符串完全不符合JSON格式。下面给你两种实用的解决方案:
方案一:提前检查响应体是否为空
在map操作里先判断响应体的内容,只有非空时才执行JSON解析,否则返回符合业务需求的默认值:
save<T>(url: string, data: any, headers = null): Observable<T> { return this.http .post(url, data, headers) .map(x => { // 检查响应体是否存在有效内容(trim处理空白字符场景) if (x._body && x._body.trim()) { return x.json() as T; } // 根据业务场景返回合适默认值,比如null或空对象 return null as unknown as T; // 如果T是对象类型,也可以返回:return {} as T; }) .catch(error => { this.app.handleError(error, errorMessage); return Observable.throw(error); }).share(); }
方案二:用try/catch包裹解析逻辑
如果不确定响应体是否为有效JSON(除了空字符串,还可能有格式错误的JSON),用try/catch包裹解析逻辑会更健壮:
save<T>(url: string, data: any, headers = null): Observable<T> { return this.http .post(url, data, headers) .map(x => { try { return x.json() as T; } catch (e) { // 解析失败时返回默认值,可根据业务调整 return null as unknown as T; } }) .catch(error => { this.app.handleError(error, errorMessage); return Observable.throw(error); }).share(); }
这种方式不仅能处理空响应,还能兼容其他JSON解析失败的场景。
另外提一句:如果你的项目可以升级到Angular 5+,推荐换成HttpClient模块,它会自动帮你处理JSON解析,当响应体为空时会直接返回null,不需要手动调用json(),从根源上避免这类问题。
内容的提问来源于stack exchange,提问作者bluray
相关产品推荐
相关产品推荐

