仅在Internet 10中,转换AJAX响应返回的XML时出错:
对象不支持属性或方法“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怎么了?
发布于 2012-11-30 20:47:27
这是因为 returns a "native XML document" by default instead of an MSXML document。
您可以强制XMLHttpRequest对象返回MSXML对象,方法是将responseType属性设置为"msxml-document"。不幸的是,这破坏了Google,所以您需要尝试/捕捉它。
在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设置- jQuery不处理由Chrome (以及其他浏览器)引发的错误?尝试将responseType设置为无效值时。这需要用try/catch包装,最好的方法是在beforeSend函数中这样做。
发布于 2013-09-30 02:02:06
@mauris:它在jQuery1.9.1中被破坏了,因为他们忽略了responseXML,并从responseText创建了一个新的DOM,这是行不通的。
我修改了jQuery1.9.1(在它复制responseText之后,第8570行)
try
{
var xml = xhr.responseXML;
if (xml && xml.documentElement)
responses.xml = xml;
} catch (_) { }这就解决了这个问题。为了安全起见,代码与它在1.8.3中所做的相同。
https://stackoverflow.com/questions/13652932
复制相似问题