【问题标题】:jquery ajax call is forcing XML element names in the response to lowercasejquery ajax 调用在响应小写时强制 XML 元素名称
【发布时间】:2014-09-05 02:22:37
【问题描述】:

我有以下代码:

  var frm = $('#login');   
  frm.submit(function (ev) {
    var postData = $(this).serializeArray();
    $.ajax({
      type: frm.attr('method'),
      url: frm.attr('action'),
      datatype: "xml",
      data: postData,
      success: function (data, textStatus, jqXHR) {
        var saml = $("saml2\\:Assertion", (new XMLSerializer()).serializeToString(data));
        var $assertion = $('<div/>').text(saml[0].outerHTML);
        $('<pre/>').appendTo('#body').text(vkbeautify.xml($assertion.text()));
      },
      error: function (jqXHR, textStatus, errorThrown) {
        alert('login failed - '.concat(jqXHR.responseText));
      }
    });

我正在调用的服务正在返回一个 XML 文档,其中元素名称采用 CamelCase 格式。文档开始:

<ns3:RequestSecurityTokenResponse xmlns:ns1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:ns10="http://www.w3.org/2000/09/xmldsig#" xmlns:ns2="http://www.w3.org/2005/08/addressing" xmlns:ns3="http://docs.oasis-open.org/ws-sx/ws-trust/200512/" xmlns:ns4="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:ns5="http://docs.oasis-open.org/ws-sx/ws-trust/200802" xmlns:ns6="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:ns7="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:ns8="http://schemas.xmlsoap.org/ws/2005/02/sc" xmlns:ns9="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
<ns3:RequestedSecurityToken>

我遇到的问题是,当我在调试器中检查返回的数据对象时(在执行以 'var saml' 开头的行之前有一个断点,我可以看到元素名称都是小写的,例如顶部-level 元素现在是 ns3:requestsecuritytokenresponse。

我可以看到线路上的消息是大写的。

任何想法如何防止 Ajax 强制元素名称为小写?

谢谢。

【问题讨论】:

    标签: javascript jquery ajax xml


    【解决方案1】:

    我认为问题可能在于 JQuery 将数据解释为 HTML 而不是 XML。由于您没有正确设置 dataType 属性,因此根据文档,它将尝试做出明智的猜测。

    尝试更改为:

    dataType: "xml"
        ^
    

    之后,如果您仍然看到相同的行为,则可能只是您的调试器没有正确显示内容。尝试使用alert() 调用显示序列化的 XML,并检查问题是否仍然存在。

    请注意,在您创建 saml 变量的行中,您将所有内容强制转换为 HTML,因此我希望元素名称在该行之后小写,但之前不是。

    【讨论】:

    • 遗憾的是没有这样做。 Ajax 正确设置了 Accept 标头,并且正确返回了内容,但生成的数据对象(被 Javascript 识别为 XML 对象)仍然是全小写的。这很奇怪。
    • 是的,确实如此。您确定错误的不仅仅是调试器中的视图,对吧?如果您alert(data),您还会看到所有小写的元素名称吗?在以var saml 开头的行中,您自己将所有内容都转换为 HTML,但您说数据对象本身已经小写了。
    • 好吧,球。似乎 Chrome 检查员一直在骗我。 alert(data) 显示:[object XMLDocument],但是 alert((new XMLSerializer()).serializeToString(data)) 显示了一个不错的 CamelCase 文档。
    • 使用 Firebug,我可以看到问题似乎发生在选择中: var saml = $("saml2\\:Assertion", (new XMLSerializer()).serializeToString(resp)) saml对象全小写。
    • 是的,该行将所有内容强制为 DOM 元素,因此可以预期小写。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 2020-08-31
    • 2012-11-03
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    相关资源
    最近更新 更多