0

Internet Explorer 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の何が問題になっていますか?

4

2 に答える 2

8

これは、IE 10 の時点で、XMLHttpRequest.responseXMLデフォルトで MSXML ドキュメントではなく「ネイティブ XML ドキュメント」が返されるためです。

プロパティを にXMLHttpRequest設定することにより、代わりに MSXML オブジェクトを返すようにオブジェクトを強制できます。残念ながら、これは Google Chrome では機能しないため、try/catch でラップする必要があります。responseType"msxml-document"

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'
    });
}

注:設定 を使用しないでください- jQuery は、無効な値xhrFieldsに設定しようとしたときに Chrome (および他のブラウザー?) によってスローされるエラーを処理しません。responseTypeこれは try/catch でラップする必要があり、それを行う最善の方法はbeforeSend関数内にあります。

于 2012-11-30T20:47:27.207 に答える