我正在尝试使用Angular的$ http的transformResponse方面将XML数据转换为JSON。结果对象为null,我无法弄清楚原因。
以下是服务中的$ http请求:
myApp.service('dataSource', function ($http) { // gets the XML data, turns it into JSON
this.getData = function(callback) {
$http.get('http://localhost:1337/testXML.xml', {transformResponse: function (data) {
var json = x2js.xml_str2json(data);
return json;
}
}
).
success(function (data) {
callback(data);
}).
error (function () {
alert("HTTP error.");
});
}
});
回调函数在控制器中定义,该控制器位于单独的文件中。这是代码:
// callback function
setData = function(data) {
$scope.dataJSON = data;
}
dataSource.getData(setData);
因此,对$ http的调用返回的变量'json'是未定义的。我尝试了多种不同的变压器,没有成功。有谁能发现我的问题?
谢谢!
答案 0 :(得分:0)
您的代码看起来很好。通过在返回行之前添加console.log(json)或使用调试器(Chrome Dev Tools / Firefox)并在返回行和成功函数内设置断点,检查json以查看您获得的内容。在调试器中添加json和数据作为监视变量,您可以在遍历每一行时检查值。
既然你说数据没问题,并且x2js是一个坚如磐石的库,那么当它到达你的成功回调函数时,我会猜测json也会好的。您可以单步执行调试器并在值从一个传递到另一个时检查该值。由于它是异步的,您需要在成功函数中设置断点。
通过检查,您可能会发现数据不是很好,而且导致下游问题的原因是什么。
答案 1 :(得分:0)
当命名空间url有一个错误的空格时,我返回null
。
这没关系:
<fs:resultSource xmlns:fs="http://a9.com/-/opensearch/extensionsfiederation/1.0/" fs:sourceld="EDL">EDL</fs:resultSource>
但是返回null:
<fs:resultSource xmlns:fs="http://a9.com/- /opensearch/extensionsfiederation/1.0/" fs:sourceld="EDL">EDL</fs:resultSource>