2016-07-16 6 views
0

У меня есть XML-ответ от службы SOAP с использованием JS. Но я не могу показать это в HTML. Вот мой код JS.Не удается разобрать xml из SOAP

function renderXML(xmlDoc) { 
        var i; 
        var list="<ul class='ui-listview'> "; 
        var x = xmlDoc.getElementsByTagName("Table"); 
        for (i = 0; i <x.length; i++) { 
        list += "<li class='ui-li-static'>" + 
        x[i].getElementsByTagName("Name")[0].childNodes[0].nodeValue + 
        "</li> " ; 
        } 
        list += "</ul>"; 
        document.getElementById("ws_data").innerHTML = list; 
       } 

Я получил этот XML в качестве ответа. http://www.webservicex.net/country.asmx/GetCountries

Это показывает

app.js:33 Uncaught TypeError: Cannot read property 'getElementsByTagName' of null 

на этой линии

var x = xmlDoc.getElementsByTagName("Table"); 

Но если я отправить жесткий кодированный XML для этой функции, он отлично работает! И показывает в html.

var data= jQuery.parseXML("<NewDataSet> <Table> <Name>Afghanistan, Islamic State of</Name> </Table> <Table> <Name>Albania</Name> </Table> <Table> <Name>Algeria</Name> </Table> <Table> <Name>American Samoa</Name> </Table> </NewDataSet> "); 


renderXML(data); 

В чем проблема?

ответ

2

Веб-служба возвращает XML в этом формате:

<string>XML as TEXT</string> 

Так что вам нужно разобрать XML as TEXT для того, чтобы получить документ XML. Пожалуйста, прочтите эту демонстрацию: https://jsfiddle.net/iRbouh/q20w39f8/

Кроме того, после проверки заголовков ответов сервера нет Access-Control-Allow-Origin, это означает, что сервер не разрешает доступ к перекрестному соединению. Так как вы делаете запрос HTTP кросс-происхождения, ваш запрос будет отклонен браузером после политики Same-Origin:

The same-origin policy restricts how a document or script loaded from one origin can interact with a resource from another origin. It is a critical security mechanism for isolating potentially malicious documents.

Короче говоря, вы НЕ МОЖЕТ сделать запрос Ajax на этот веб-сервис.

PS: в моем демо, я использовал CORS прокси: https://crossorigin.me/

+0

Не работает ... он показывает app.js (42): TypeError: 'нулевой' не является объектом (оценка 'xmlDoc.getElementsByTagName') –

+0

Я использую JQuery 1.9.1 ... это проблема? –

+0

Нет ... я использовал XMLHTTPRequest –

Смежные вопросы