我正在尝试通过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)
})
});
答案 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/