在我的项目中,系统要支持多语言环境,所以采用utf-8编码格式,系统菜单是通过一个action返回一个xml获得菜单数据进行加载的。
最初js脚本中采用如下方式进行加载:
下面这段代码是WebFx的xmlextras.js中的代码:
下面是我调用的过程:
这段代码要包含在一个方法中。
最初js脚本中采用如下方式进行加载:
1
var
xmlDoc
=
new
ActiveXObject(
"
MSXML.DOMDocument
"
);
2
xmlDoc.async
=
false
;
3
xmlDoc.load(
"
sysMemo.do
"
);
结果返回的xml中文全是乱码,一直搞不明白是什么原因,该设置的地方也全部设置了。最后通过使用WebFx的一个js类通过xmlhttp的方式解决了这个问题。

2

3

下面这段代码是WebFx的xmlextras.js中的代码:
1
function
getDomDocumentPrefix()
{
2
if (getDomDocumentPrefix.prefix)
3
return getDomDocumentPrefix.prefix;
4
5
var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
6
var o;
7
for (var i = 0; i < prefixes.length; i++)
{
8
try
{
9
// try to create the objects
10
o = new ActiveXObject(prefixes[i] + ".DomDocument");
11
return getDomDocumentPrefix.prefix = prefixes[i];
12
}
13
catch (ex)
{};
14
}
15
16
throw new Error("Could not find an installed XML parser");
17
}
18
19
function
getXmlHttpPrefix()
{
20
if (getXmlHttpPrefix.prefix)
21
return getXmlHttpPrefix.prefix;
22
23
var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
24
var o;
25
for (var i = 0; i < prefixes.length; i++)
{
26
try
{
27
// try to create the objects
28
o = new ActiveXObject(prefixes[i] + ".XmlHttp");
29
return getXmlHttpPrefix.prefix = prefixes[i];
30
}
31
catch (ex)
{};
32
}
33
34
throw new Error("Could not find an installed XML parser");
35
}
36
37
//
////////////////////////
38
//
Start the Real stuff //
39
//
////////////////////////
40
41
42
//
XmlHttp factory
43
function
XmlHttp()
{}
44
45
XmlHttp.create
=
function
()
{
46
try
{
47
if (window.XMLHttpRequest)
{
48
var req = new XMLHttpRequest();
49
50
// some versions of Moz do not support the readyState property
51
// and the onreadystate event so we patch it!
52
if (req.readyState == null)
{
53
req.readyState = 1;
54
req.addEventListener("load", function ()
{
55
req.readyState = 4;
56
if (typeof req.onreadystatechange == "function")
57
req.onreadystatechange();
58
}, false);
59
}
60
61
return req;
62
}
63
if (window.ActiveXObject)
{
64
return new ActiveXObject(getXmlHttpPrefix() + ".XmlHttp");
65
}
66
}
67
catch (ex)
{}
68
// fell through
69
throw new Error("Your browser does not support XmlHttp objects");
70
}
;
71
72
//
XmlDocument factory
73
function
XmlDocument()
{}
74
75
XmlDocument.create
=
function
()
{
76
try
{
77
// DOM2
78
if (document.implementation && document.implementation.createDocument)
{
79
var doc = document.implementation.createDocument("", "", null);
80
81
// some versions of Moz do not support the readyState property
82
// and the onreadystate event so we patch it!
83
if (doc.readyState == null)
{
84
doc.readyState = 1;
85
doc.addEventListener("load", function ()
{
86
doc.readyState = 4;
87
if (typeof doc.onreadystatechange == "function")
88
doc.onreadystatechange();
89
}, false);
90
}
91
92
return doc;
93
}
94
if (window.ActiveXObject)
95
return new ActiveXObject(getDomDocumentPrefix() + ".DomDocument");
96
}
97
catch (ex)
{}
98
throw new Error("Your browser does not support XmlDocument objects");
99
}
;
100
101
//
Create the loadXML method and xml getter for Mozilla
102
if
(window.DOMParser
&&
103
window.XMLSerializer
&&
104
window.Node
&&
Node.prototype
&&
Node.prototype.__defineGetter__)
{
105
106
// XMLDocument did not extend the Document interface in some versions
107
// of Mozilla. Extend both!
108
XMLDocument.prototype.loadXML =
109
Document.prototype.loadXML = function (s)
{
110
111
// parse the string to a new doc
112
var doc2 = (new DOMParser()).parseFromString(s, "text/xml");
113
114
// remove all initial children
115
while (this.hasChildNodes())
116
this.removeChild(this.lastChild);
117
118
// insert and import nodes
119
for (var i = 0; i < doc2.childNodes.length; i++)
{
120
this.appendChild(this.importNode(doc2.childNodes[i], true));
121
}
122
};
123
124
125
/**//*
126
* xml getter
127
*
128
* This serializes the DOM tree to an XML String
129
*
130
* Usage: var sXml = oNode.xml
131
*
132
*/
133
// XMLDocument did not extend the Document interface in some versions
134
// of Mozilla. Extend both!
135
XMLDocument.prototype.__defineGetter__("xml", function ()
{
136
return (new XMLSerializer()).serializeToString(this);
137
});
138
Document.prototype.__defineGetter__("xml", function ()
{
139
return (new XMLSerializer()).serializeToString(this);
140
});
141
}



2

3

4

5

6

7



8



9

10

11

12

13



14

15

16

17

18

19



20

21

22

23

24

25



26



27

28

29

30

31



32

33

34

35

36

37

38

39

40

41

42

43



44

45



46



47



48

49

50

51

52



53

54



55

56

57

58

59

60

61

62

63



64

65

66

67



68

69

70

71

72

73



74

75



76



77

78



79

80

81

82

83



84

85



86

87

88

89

90

91

92

93

94

95

96

97



98

99

100

101

102

103

104



105

106

107

108

109



110

111

112

113

114

115

116

117

118

119



120

121

122

123

124

125


126

127

128

129

130

131

132

133

134

135



136

137

138



139

140

141

下面是我调用的过程:
1
var
xmlHttp
=
XmlHttp.create();
2
xmlHttp.open(
"
GET
"
,
"
showMenu.do
"
,
false
);
//
async
3
xmlHttp.onreadystatechange
=
function
()
{
4
if (xmlHttp.readyState == 4)
{
5
getMenuTree(xmlHttp.responseXML);
6
}
7
}
;
8
xmlHttp.send(
null
);

2

3



4



5

6

7

8

这段代码要包含在一个方法中。