JQuery只能在Firefox中找到XMLDocument中的元素

时间:2016-02-12 10:47:37

标签: javascript jquery firefox xmldocument

我调用了一个返回下一个原始响应的Web服务

    HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 1516
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
Date: Fri, 12 Feb 2016 10:28:58 GMT

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <OperationListResponse xmlns="http://tempuri.org/">
            <OperationListResult xmlns:a="http://schemas.datacontract.org/2004/07/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
                <a:data>123</a:data>
                <a:operation_id i:nil="true"/>
                <a:status>OK</a:status>
            </OperationListResult>
        </OperationListResponse>
    </s:Body>
</s:Envelope>

当我在我的javascript代码中获取此XML时,我正在尝试使用下一个代码读取元素“status”:

//dataResponse is my javascript valid XMLDocument
x = $(dataResponse).find('status').text();

而不是“好”,我得到了“”。这只发生在Firefox中。奇怪的是它在Chrome,Opera,Edge和Safari中运行良好。 在Firefox中调试时,看一下dataResponse对象,我实际上可以看到节点“status”的值为“OK”。

enter image description here

有关如何解决此问题的任何线索?

编辑: 我已经尝试过做Jai建议的更改,我从firefox获得了奇怪的结果。如果我看一个变量“查找”,我可以看到文字。如果我试图通过直接输入“$(dados).find('a \:status')。text()”来查找,我看不到任何结果。 Firefox手表面板: enter image description here

Chrome手表面板: enter image description here

2 个答案:

答案 0 :(得分:2)

正如我在评论中发布的那样,:\\一起逃避:

x = $(dataResponse).find('a\\:status').text();

但是,它没有任何意义,在其他浏览器中有效,但是firefox。

答案 1 :(得分:1)

Jquery可能与此无关,除了作为工作的错误工具。对于元素查找,它主要委托给querySelectorAll。 XML文档具有名称空间,selectors have special handling用于名称空间。

但是,命名空间shorthands要求首先声明从简写到命名空间URI的映射。例如。 XPath查找通过Document.evaluate的命名空间解析器参数执行此操作,样式表中的选择器从@namespace declarations

中检索它们

querySelectorAll不接受支持此类命名空间解析的参数,因此只能指定no-namespace,default-namespace和any-namespace选择器。

换句话说,无法将status命名空间中的a -> http://schemas.datacontract.org/2004/07/元素与a|status选择器匹配到querySelectorAll,实际上它应该a:status 3}}。 *|status只是一个浏览器不知道的伪元素选择器。

更通用的CREATE TRIGGER MY_TRIGGER ON MY_TABLE FOR INSERT AS DECLARE @myVariable; DECLARE InsertedRows CURSOR FAST_FORWARD FOR SELECT A_COLUMN FROM INSERTED; OPEN InsertedRows; FETCH NEXT FROM InsertedRows INTO @NewOrderCode; ... INSERT INTO ANOTHER_TABLE ( CODE, DATE_INSERTED ) VALUES ( @myVariable, GETDATE() ); ...etc 选择器应该匹配它,但它也可能通过从其他命名空间中选择状态元素而超支。

如果要在XML文档中进行名称空间感知遍历,则可能应该使用XPath。

相关问题