2012-04-16 29 views
6

Mã sau hoạt động trong Chrome chứ không phải IE hoặc FireFox. Có ai đó biết mã trình duyệt chéo thích hợp không?

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing"> 
<s:Header> 
    <a:Action s:mustUnderstand="1">http://tempuri.org/SubscriptionService/Update</a:Action> 
    <netdx:Duplex xmlns:netdx="http://schemas.microsoft.com/2008/04/netduplex"> 
     <netdx:Address>http://docs.oasis-open.org/ws-rx/wsmc/200702/anonymous?id=4ed8a7ee-b124-e03e-abf0-a294e99cff73</netdx:Address> 
     <netdx:SessionId>177b4f47-5664-d96c-7ffa-0a8d879b67dd</netdx:SessionId> 
    </netdx:Duplex> 
</s:Header> 
<s:Body> 
    <Update xmlns="http://tempuri.org/"> 
     <lstResponseStruct xmlns:b="http://schemas.datacontract.org/2004/07/FSS.Libs.Core.InterprocessData.RMS" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
      <b:DataA> 
       <b:ValueA>1.339565</b:ValueA> 
       <b:Status>None</b:Status> 
      </b:DataA> 
      <b:DataA> 
       <b:ValueA>120.3717</b:ValueA> 
       <b:Status>None</b:Status> 
      </b:DataA> 
      <b:DataA> 
       <b:ValueA>133.563116</b:ValueA> 
       <b:Status>None</b:Status> 
      </b:DataA> 
      <b:DataA> 
       <b:ValueA>-0.0059159999999999994</b:ValueA> 
       <b:Status>None</b:Status> 
      </b:DataA> 
     </lstResponseStruct> 
    </Update> 
</s:Body> 

Sau đây là các đoạn mã JavaScript ...

<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script> 

var nodes; 
if (typeof DOMParser != "undefined") 
    nodes = ((new DOMParser()).parseFromString(request.responseText, "application/xml")).getElementsByTagName("*"); 
else { 
    request.responseXML.loadXML(request.responseText); 
    nodes = request.responseXML.getElementsByTagName("*"); 
} 

for (var i = 0; i < nodes.length; i++) { 
    var element = nodes[i]; 
    ... 
    if ((element.localName == "Body" || element.baseName == "Body") && element.namespaceURI == "http://www.w3.org/2003/05/soap-envelope") { 
     body = element; 
     break; 
} 

$(body).find('DataA').each(function() { 
    ... Do something 
} 

đối với một số lý do, trong mỗi trình duyệt "cơ thể" chắc chắn chứa xml cơ thể, tuy nhiên $ (cơ thể) .find ('DataA') không trả lại kết quả cho IE hoặc FireFox.

Cập nhật:

Thêm không gian tên $ (cơ thể) .find ('b \\: DataA') hoạt động tốt cho FireFox và IE, nhưng phá vỡ Chrome!

+4

Mẹo: Sử dụng phương thức ['$ .parseXML'] của jQuery (http://api.jquery.com/jQuery.parseXML/). Nó trả về một đối tượng 'XMLDocument' (không phải đối tượng jQuery). Để có được một đối tượng jQuery, bọc giá trị trả về: '$ ($. ParseXML (' Test')); ' –

+0

Tốt hơn, vì đây dường như là một yêu cầu ajax, hãy sử dụng' ajax' của jquery và đặt 'dataType 'thích hợp (hoặc để jquery con số nó ra) và bạn thậm chí sẽ không cần phải gọi' parseXML' trực tiếp. –

+0

$ (xData.responseXML) .find ("z \\: hàng, hàng"). Each (function() {// Do Stuff}); Dường như làm việc cho IE, FireFox và Chrome. – antwarpes

Trả lời

12

Đã xảy ra sự cố khi truy cập các nút XML không có vùng tên được chỉ định. Vì một lý do nào đó Chrome không muốn thấy không gian tên.

Tôi nhận thấy bộ chọn "b \: DataA" hoạt động cho FireFox và IE và bộ chọn "DataA" hoạt động cho Chrome.

như vậy ...

$(xData.responseXML).find("b\\:DataA, DataA").each(function() { // Do Stuff }); 

Dường như làm việc cho IE, FireFox và Chrome.

xem http://www.steveworkman.com/html5-2/javascript/2011/improving-javascript-xml-node-finding-performance-by-2000/ để biết thêm thông tin và cách cải thiện hiệu suất tìm nút XML.

+1

Cảm ơn, chúng tôi có cùng một vấn đề. 1 để giải quyết vấn đề của tôi. –

+0

Cảm ơn, điều này đã giải quyết được vấn đề của tôi. Oh, và nó hoạt động trong Safari quá cho vấn đề đó .. :-) – Drew

0

Nó hoạt động tốt !!! Hãy thử điều này,

Chrome/Firefox:

xml.children[0].childNodes[1].innerHTML; 

IE8 +/Safari:

xml.childNodes[0].childNodes[1].textContent; 

IE8:

xml.documentElement.childNodes[1].text; 

Mẫu mã ở đây,

var xml = $.parseXML(XMLDOC); 

Var xmlNodeValue = ""; 

if(userAgent.match("firefox")){ 

xml.children[0].childNodes[1].innerHTML; 

}else{ // IE8+ 

xmlNodeValue = xml.childNodes[0].childNodes[1].textContent; 

} 
+0

tham chiếu bằng cách sử dụng chỉ mục vị trí được mã hóa cứng không linh hoạt. – lulalala

Các vấn đề liên quan