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!
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 ')); ' –
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. –
$ (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