我使用 JS 从 SOAP 服务获得了 XML 作为响应。但我无法在 HTML 中显示它。 这是我的 JS 代码。
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);
问题是什么?
最佳答案
您的 Web 服务返回以下格式的 XML:
<string>XML as TEXT</string>
因此,您需要将 XML 解析为 TEXT
才能获取 XML 文档。请查看此演示:https://jsfiddle.net/iRbouh/q20w39f8/
此外,检查服务器响应头后,没有Access-Control-Allow-Origin
,这意味着服务器不允许跨域访问。由于您发出跨域 HTTP 请求,您的请求将被浏览器按照同源策略拒绝:
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.
简而言之,您不能向该 Web 服务发出 ajax 请求。
PS:在我的演示中,我使用了 CORS 代理:https://crossorigin.me/
关于javascript - 无法从 SOAP 解析 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38410622/