【问题标题】:Error messages in jQuery's XML parsingjQuery 的 XML 解析中的错误消息
【发布时间】:2014-10-18 13:28:01
【问题描述】:

我想知道 jQuery 在解析 XML 时提供了什么样的信息。 Here is an example.

整体有错误:

错误:无效的 XML:这根本不是有效的 XML。

或者您可以使用e.message提取消息:

无效的 XML:这根本不是有效的 XML。

但是还有哪些其他方法呢?例如,是否有可能只获得“无效 XML”位?我已经用谷歌搜索了很长时间,但找不到任何关于此的文档。

另外,jQuery 会生成这些错误回退,还是 jQuery 只是利用浏览器的 XML 处理?

【问题讨论】:

    标签: jquery xml error-handling


    【解决方案1】:

    您的问题的答案包含在 jQuery 源代码中:

    jQuery.parseXML = function( data ) {
        var xml, tmp;
        if ( !data || typeof data !== "string" ) {
            return null;
        }
        try {
            if ( window.DOMParser ) { // Standard
                tmp = new DOMParser();
                xml = tmp.parseFromString( data, "text/xml" );
            } else { // IE
                xml = new ActiveXObject( "Microsoft.XMLDOM" );
                xml.async = "false";
                xml.loadXML( data );
            }
        } catch( e ) {
            xml = undefined;
        }
        if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
            jQuery.error( "Invalid XML: " + data );
        }
        return xml;
    };
    

    是的,它正在使用浏览器方法和

    不,不重写方法是无法隔离具体问题的。

    Helpful jQuery Source Viewer with method search

    【讨论】:

      【解决方案2】:

      试试

          (function($) {
          jQuery._parseXML = function ( data ) {
              var xml, tmp, e, msg;
              if ( !data || typeof data !== "string" ) {
                  return null;
              }
              try {
                  if ( window.DOMParser ) { // Standard
                      tmp = new DOMParser();
                      xml = tmp.parseFromString( data, "text/xml" );
                  } else { // IE
                      xml = new ActiveXObject( "Microsoft.XMLDOM" );
                      xml.async = "false";
                      xml.loadXML( data );
                  }
              } finally {
                  e = $(xml).children().contents().filter(function(i, el) {
                        return $(el).is("parsererror")
                      });
                      // if `parsererror` element `length` > 0
                      // return `msg` , else return `undefined`
                      msg = !!e.length 
                            // define error `msg` here
                            ? [ e.text()
                               , e.next()[0].previousSibling.nodeValue
                               , e.next()[0].outerHTML
                               , e.next()[0] 
                              ] 
                            : undefined;
              }
              // if `msg` !== undefined , return `msg` , else return `xml`
              return msg !== undefined ? msg : xml
          }
          }(jQuery));
      

      (function($) {
              jQuery._parseXML = function ( data ) {
                  var xml, tmp, e, msg;
                  if ( !data || typeof data !== "string" ) {
                      return null;
                  }
                  try {
                      if ( window.DOMParser ) { // Standard
                          tmp = new DOMParser();
                          xml = tmp.parseFromString( data, "text/xml" );
                      } else { // IE
                          xml = new ActiveXObject( "Microsoft.XMLDOM" );
                          xml.async = "false";
                          xml.loadXML( data );
                      }
                  } finally {                
                      e = $(xml).children().contents().filter(function(i, el) {
                            return $(el).is("parsererror")
                          });
                      msg = !!e.length 
                            // define error `msg` here
                            ? [ e.text()
                               , e.next()[0].previousSibling.nodeValue
                               , e.next()[0].outerHTML
                               , e.next()[0] 
                              ] 
                            : undefined;
                  }
                  // if ( !xml || !xml.documentElement 
                  //      || xml.getElementsByTagName( "parsererror" ).length ) {
                  // jQuery.error( "Invalid XML: " + data );
                  // }
                  return msg !== undefined ? msg : xml
              }
              }(jQuery));
      
      console.log(
        $._parseXML("<node>abc123</node>")
        , $._parseXML("<node>abc123<node>")
      )
      &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"&gt;&lt;/script&gt;

      【讨论】:

        猜你喜欢
        • 2018-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-20
        • 2014-01-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多