我们有一个 webapp(标准 Spring MVC,Java)——我已经写好了——它以 XML 的形式返回给我们的客户端(浏览器)的响应。响应使用 JAXB 等进行编组。
在 ui 中 - 为了与第 3 方软件交互,我们需要将部分 XML 原样传递到 javascript 方法中。
即从thirdPartyStuff 中的'<' 到最后的'>' 的所有内容- 都需要提取。
经过无数次尝试和大量调试 - 我得出结论,这是错误的方法。我相信我应该将响应的那部分包装在 CDATA 中,并将其提取为 .text() 在任何对象上...目前我们正在使用 jquery ...响应在 AJAX 调用上返回...
但也许它可以做到......目前我们正在尝试在一个元素上调用 .html() 时绊倒 - 作为它的 XML - 落在一个堆中。
TIA。
:-)
下面是第三部分的“us”和“xml”的响应结构应用程序数据。仅(包括)从“ ... to” - 需要提取并按原样(文本字符串)传递给第 3 方方法。
<xml>
<someNode>
<ourStuff veryUseful="true"/>
<thirdPartyStuff a="1" b="2">
<moreStuff/>
<evenMoreStuff/>
</thirdPartyStuff>
</someNode>
</xml>
下面是一个失败的测试,基本上说明了我的无知。所以当然 console.log 必须失败。
实际上,数据是通过 $.ajax() 调用返回的——但是这个测试说明了这种行为。它会生成一个“未捕获的类型错误:无法调用未定义的方法'replace'”——因为XML“节点”上没有 innerHtml——我当然相信这是绝对正确的,并且在 jquery API 文档中记录了这一点。
注意- 这对我来说在 Windows 上的 Chrome 和 IE 中失败,但适用于 Firefox (Mac OS)... :-|
<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script type="text/javascript">
function hackit() {
var data = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" +
"<xml>" +
"<thirdParty>" +
"<blah a=\"0\" b=\"0\">" +
"</blah>" +
"</thirdParty>" +
"</xml>";
$xmlData = $.parseXML(data);
$data = $($xmlData);
var thing = $data.find("thirdParty");
console.log(thing.html());
}
</script>
</head>
<body onload="hackit()">
Loaded.
</body>
</html>
我想我最终会走这条路。