Конверторът на XML към JSON не работи в приложението Angular

Опитвам се да използвам аспекта transformResponse на Angular на $http, за да конвертирам 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);

Така че променливата 'json', която се връща от извикването на $http, е недефинирана. Опитах много различни трансформатори, без успех. Може ли някой да забележи проблема ми?

Благодаря!


person Emma    schedule 12.07.2013    source източник
comment
Проверихте ли дали въведеното (data) е правилно? Какво ще кажете за прекия резултат от x2js.xml_str2json(data) извън цикъла на angular?   -  person yuxhuang    schedule 13.07.2013
comment
Да, data е правилно, но върнатата стойност на x2js.xml_str2json(data) е null. Това означава ли, че има нещо нередно с начина, по който импортирам конвертора? Благодаря!   -  person Emma    schedule 15.07.2013
comment
Всъщност променливата json не е нулева. Но когато го върна и се опитам да го използвам във функцията за обратно извикване, това е просто [object Object], което според мен няма информация в него и не може да бъде анализирано.   -  person Emma    schedule 15.07.2013


Отговори (2)


Вашият код изглежда добре. Проверете json, за да видите какво получавате или като добавите console.log(json) преди реда за връщане, или като използвате програмата за отстраняване на грешки (Chrome Dev Tools/Firefox) и зададете точки на прекъсване на реда за връщане и във функцията за успех. Добавете json и данни като променливи за наблюдение във вашия дебъгер и можете да проверявате стойностите, докато преминавате през всеки ред.

Тъй като казвате, че данните са ОК, а x2js е стабилна библиотека, предполагам, че json също ще е ОК, когато стигне до вашата функция за обратно извикване за успех. Можете просто да преминете през дебъгера и да проверите стойността, докато преминава от един към друг. Тъй като е асинхронен, ще трябва да зададете точка на прекъсване във вашата функция за успех.

Възможно е при проверка да откриете, че данните наистина не са наред и това е причината за проблемите надолу по веригата.

person Michael Bushe    schedule 18.03.2014

Върнах 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>
person cfaigle    schedule 24.02.2015