nix*_*xon 9 javascript xml xslt ajax jquery
嗨,我正在寻找一种方法来渲染XML文档,我使用ajax检索到新的浏览器窗口.
我正在使用JQuery的ajax()函数将JSON数据发布到MVC控制器.控制器将XML作为字符串返回.
我正在使用window.open()在javascript中创建一个新窗口并通过调用设置文档内容.
newwindow.document.clear();
newwindow.document.
newwindow.document.write(jqXHR.responseText);
newwindow.document.close();
Run Code Online (Sandbox Code Playgroud)
(其中jqXHR.responseText是从ajax()调用返回的XML.)
新窗口按预期打开,如果我在页面上查看源代码,我会看到我的XML.但是(你知道一个人来了)浏览器窗口中没有任何内容.显然,如果我将页面源保存到磁盘并打开输出,则按预期呈现.
谁有人建议解决方案?重新迭代我的主要目标是将XML文档(通过ajax调用获得)呈现到新窗口.
我还要补充一点,我希望看到由XSLT转换的输出.我的XML有这个处理指令.非常感谢
编辑 ---------------------------我想要的解决方案----------------- --------
感谢大家的意见和建议.
我最终得到的解决方案是使用target ="_ blank"的表单然后我将JSON作为隐藏字段写入表单,并将其发布到我的控制器,该控制器返回XML(从JSON构造).当从响应返回XML时,浏览器按预期标记它.我想这不是原始问题的答案.但是Gabby在下面有一个解决方案.
以下内容仅适用于FireFox和Opera,但我认为值得一提......
window.open('data:text/xml,' + encodeURIComponent( jqXHR.responseText ) );
Run Code Online (Sandbox Code Playgroud)
也应该使用chrome,但它看起来与window.open通常的URL不同...如果你只是在chrome中输入生成的url它也适用于那里..
更新 适用于所有浏览器!
问题是javascript能够使用xslt转换xml.
但不是自动的,所以我们需要找到XML文件以引用XSLT文件并加载它.然后我们可以在javascript中进行转换并将生成的html传递给新窗口.
IE自然会处理与其他东西不同的东西.
$.get('xml-file-here.xml',
function(xmlData){
var xml = xmlData;
//extract the stylesheet so we can load it manually
var stylesheet;
for (var i=0;i<xml.childNodes.length;i++){
if ( xml.childNodes[i].nodeName =='xml-stylesheet' )
{
stylesheet = xml.childNodes[i].data;
}
}
var items = stylesheet.split('=');
var xsltFile = items[items.length-1].replace(/"/g,'');
//fetch xslt manually
$.get( xsltFile, function(xsltData){
var xslt = xsltData;
var transformed;
if (! window['XSLTProcessor'])
{
// Trasformation for IE
transformed = xml.transformNode(xslt);
}
else
{
// Transformation for non-IE
var processor = new XSLTProcessor();
processor.importStylesheet(xslt);
var xmldom = processor.transformToDocument(xml);
var serializer = new XMLSerializer();
var transformed = serializer.serializeToString(xmldom.documentElement);
}
var newwindow = window.open();
newwindow.document.open();
newwindow.document.write(transformed);
newwindow.document.close();
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11364 次 |
| 最近记录: |