仅在Internet Explorer 10中,我收到转换从AJAX响应返回的XML的错误:
Object不支持属性或方法'transformNode'
这是我的代码:
function transformXML(xmlUrl, xsl) {
$.ajax({
type: 'GET',
url: xmlUrl,
success: function (xml, status, xhr) {
// cross-browser logic omitted for simplicity
xml.transformNode(xsl);
},
dataType: 'xml'
});
}
这适用于IE7 - IE9。 IE10有什么问题?
答案 0 :(得分:8)
您可以通过将XMLHttpRequest
属性设置为responseType
来强制"msxml-document"
对象返回MSXML对象。不幸的是,这在Google Chrome中会中断,因此您需要将其包装在try / catch中。
在jQuery的beforeSend
函数中分配它:
function transformXML(xmlUrl, xsl) {
$.ajax({
type: 'GET',
url: xmlUrl,
beforeSend: function (xhr, settings) {
try { xhr.responseType = "msxml-document"; } catch(err){}
},
success: function (xml, status, xhr) {
// cross-browser logic omitted for simplicity
xml.transformNode(xsl);
},
dataType: 'xml'
});
}
注意:不要尝试使用xhrFields
设置 - 在尝试设置{{1}时,jQuery无法处理Chrome(以及其他浏览器?)引发的错误无效的值。这需要包含在try / catch中,最好的方法是使用responseType
函数。
答案 1 :(得分:1)
@mauris: 它在jquery 1.9.1中被破坏了,因为它们忽略了responseXML并从responseText创建了一个新的DOM,它不起作用。
我修改了jquery 1.9.1(在复制responseText之后的第8570行)
try
{
var xml = xhr.responseXML;
if (xml && xml.documentElement)
responses.xml = xml;
} catch (_) { }
修复了这个问题。代码与1.8.3中的代码相同,包含在try / catch中以保证安全。