将xml解析为json并使用Angular4进行订阅

时间:2017-12-03 00:17:01

标签: json xml angular http get

我尝试使用xml2js将XML字符串转换为JSON,然后我需要在另一个组件中发送和订阅结果。

getLastWeekSnow = function(){
let headers = new Headers();
headers.append('Access-Control-Allow-Origin', '*');
headers.append("Authorization", "Basic " + btoa('user' + ":" + 'password')); 
headers.append('Content-Type' , 'application/x-www-form-urlencoded');    
return this.http.get(`${this.APIUrl}`, {headers:headers})
.map(res => {
  xml2js.parseString( res.text(), function (err, result) {
   console.dir(result); //Prints JSON object!
 });
})
 .subscribe(data => { 
 console.log(data); //Undefined !          
 });
}

所以console.dir(reults)给了我所需要的东西,但是在订阅(console.log(数据)中)我得到了未定义。

为什么我在订阅中获得未定义,但在.map中获取正确的对象?

1 个答案:

答案 0 :(得分:3)

确保返回您的数据,否则无法订阅

getLastWeekSnow = function(){
let headers = new Headers();
headers.append('Access-Control-Allow-Origin', '*');
headers.append("Authorization", "Basic " + btoa('user' + ":" + 'password')); 
headers.append('Content-Type' , 'application/x-www-form-urlencoded');    

return this.http.get(`${this.APIUrl}`, {headers:headers})
.map(res => {
  let data;
  xml2js.parseString( res.text(), function (err, result) {
   console.dir(result); //Prints JSON object!
   data = result
 });
 return data;
})
 .subscribe(data => { 
 console.log(data); //Undefined !          
 });
}