0

我正在尝试使用 $http 的 Angular 的 transformResponse 方面将 XML 数据转换为 JSON。结果对象为空,我不知道为什么。

这是服务中的 $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' 是未定义的。我尝试了多种不同的变压器,但没有成功。谁能发现我的问题?

谢谢!

4

2 回答 2

0

你的代码看起来不错。通过在返回行之前添加 console.log(json) 或使用调试器 (Chrome Dev Tools/Firefox) 并在返回行和成功函数内部设置断点来检查 json 以查看您得到的结果。在调试器中添加 json 和 data 作为监视变量,您可以在遍历每一行时检查这些值。

既然你说数据没问题,而且 x2js 是一个坚如磐石的库,我猜想当它到达你的成功回调函数时,json 也会没问题。您可以单步调试调试器并检查从一个传递到另一个的值。由于它是异步的,因此您需要在成功函数中设置断点。

有可能在检查后,您会发现数据不太好,这就是导致下游问题的原因。

于 2014-03-18T15:01:56.553 回答
0

null当命名空间 url 有一个错误的空间时,我返回了。

这没关系:

<fs:resultSource xmlns:fs="http://a9.com/-/opensearch/extensionsfiederation/1.0/" fs:sourceld="EDL">EDL</fs:resultSource>

但这被返回为空:

<fs:resultSource xmlns:fs="http://a9.com/- /opensearch/extensionsfiederation/1.0/" fs:sourceld="EDL">EDL</fs:resultSource>
于 2015-02-24T18:14:21.190 回答