Angular 5 http服务响应错误

时间:2018-08-23 21:42:45

标签: xml angular http service rss

我正在尝试通过xml响应使用http RSS服务。

我的响应状态为OK(200),出现以下错误:

  

意外的令牌<在JSON中,位于XMLHttpRequest.onLoad的JSON.parse()位置0处。.

我做错了什么,如何解析xml响应?

Component.ts代码:

this.ns.nBasicApi().subscribe((jsonFromServer) => { 
  this.response = jsonFromServer;
});

服务代码:

nBasicApi():any {
  return this.http.get('http://localhost:3000/api/stocks');
}

服务器代码App.js:

const fetch = require('isomorphic-fetch');
const express = require('express');
const app = express();
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 
'GET,POST,OPTIONS,DELETE,PUT');
res.header('Access-Control-Allow-Headers','Accept,Accept- 
Language,Content-Language,Content-Type');
res.header('Access-Control-Expose-Headers','Content- 
Length,Content-Range');
next();
})
app.route('/api/stocks').get((req, res) => {
 fetch('http://www.nasdaq.com/aspxcontent/NasdaqRSS.aspx? 
data=quotes&symbol=NFLX').then((res) => { 
         return res.text();
 }).then((json) => {
     res.send(json)
 })
});

2 个答案:

答案 0 :(得分:0)

据我所知,Angular中没有内置的方法来解析XML,因此您需要找到一些库和map响应。默认情况下,Angular将响应视为JSON,因此存在解析错误。要禁用自动解析,请使用{responseType: 'text'}

nBasicApi():any {
  return this.http.get('http://localhost:3000/api/stocks', {responseType: 'text'});
}

答案 1 :(得分:0)

Angular不支持XML。 Angular通过defeault支持json。尝试使用以下np包

npm install xml2js -g 导入服务文件为:import * as xml2js from 'xml2js';

示例

let formdata = new URLSearchParams();
formdata.set('username','username');
formdata.set('pw','pw'); 
let headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded' });

let options = new RequestOptions({ headers: headers, method: RequestMethod.Post});

postData () {

     this.http.post(this._yourUrl, formdata.toString(), options)
     //convert to JSON here
     .map(res => {
            xml2js.parseString( res.text(), function (err, result) {
            console.dir(result); // Prints JSON object!
         });
     })
     .subscribe(data => { 
          console.log(data);              
     });
}

或看看这个jsfiddle http://jsfiddle.net/abdmob/gkxucxrj/1/