jQuery的Ajax传送xml 中<![CDATA] 在不同浏览器上的兼容性问题
这几天开发项目,在UI上遇到一个难题:jquery ajax 获取返回值xml不支持,<websitename><![CDATA[http://beijing.lashou.com/]]></websitename>,包含CDATA 竟然获取不到值;$(xml).find(websitename).text(); 在晚上查找了半天,找到一个解决方案,
datatype:text/xml 修改为 datatype:xml
?
但同样的,问题也来了,在chrome浏览器和IE浏览器不兼容。
?
找到一个解决方案:
?
jQuery在用Ajax传送数据时,有一个参数是dataType,对于其的使用,手册是这么说明的。
?
dataType (String) : 预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息返回 responseXML 或 responseText,并作为回调函数参数传递,可用值:
"xml": 返回 XML 文档,可用 jQuery 处理。
"html": 返回纯文本 HTML 信息;包含 script 元素。
"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了"cache"参数
"json": 返回 JSON 数据 。
"jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
"text": 返回纯文本字符串
??? 但是在使用时,发现加了dataType时发现在不同服务器上可能出现js程序出错,当然是内部错误,造成程序不能正常运行,而且错误在firebug中不显示。但是服务器中返回的xml数据有时是字符格式的,有时是xml文档格式的,该怎样去随服务器应变呢?
$(document).ready(function(){
??? var path='cache/orgnization.xml';
??? $.post(path,{},function(xml){
?????? alert(typeid(xml));//用户监测返回的datatype类型,一般为string
??? ??? if(typeof(xml)=='string') {//判断当前的xml的类型,如果是字符串,则转化为xml文档格式
??? ??? ??? xml = getXmlDoc(xml);
??? ??? }
??? ??? $(xml).find('item').each(function(index) {??? ??? ??? ???
??? ??? ??? ??? var id = $(this).find('id').eq(0).text();
??? ??? ??? ??? var name = $(this).find('name').eq(0).text();
??? ??? ??? ??? var role = $(this).find('role').eq(0).text();
??? ??? ??? ??? var contact = $(this).find('contact').text();
??? ??? ??? ??? var tel = $(this).find('tel').text();
??? ??? ??? ??? var email = $(this).find('email').text();
??? ??? ??? ??? var html="<div align='left' style='float: left; width: 42.69%; height: 108px;? border: none; padding: 8px;'><p ><strong>"+name+"</strong><br>部门职能:"+role+"<br>联系人:"+contact+" <br>联系电话:"+tel+"<br>邮箱:"+email+"</p></div>";
??? ??? ??? ??? $('#orgnization').append(html);??? ??? ??? ??? ??? ??? ??? ??? ??? ???
??? ??? });
??? ???
??? });???
});
?? 上面的jQuery代码中用到了一个 getXmlDoc函数,现在把他贴出来。
function getXmlDoc(retXml) {
?????? if( retXml == "false" ){
??????? //can not get the customer info
?? ??? ??? ?alert(retXml);
?? ??? ??? ?return false;
?????? }else{
????? ?
?? ??? ??? ?//get the xml data
?? ??? ??? ?var xmlDoc;
?? ??? ??? ?if (window.ActiveXObject)
?? ??? ??? ?{
?? ??? ??? ??? ??? xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
?? ??? ??? ??? ??? xmlDoc.async=true;
?? ??? ??? ??? ??? xmlDoc.loadXML(retXml);
?? ??? ??? ?}
?? ??? ??? ?// code for Mozilla, Firefox, Opera, etc.
?? ??? ??? ?else if (document.implementation && document.implementation.createDocument)
?? ??? ??? ?{
?? ??? ??? ?? var oParser=new DOMParser();
?? ??? ??? ?? xmlDoc=oParser.parseFromString(retXml,"text/xml");
?? ??? ??? ?}
?? ??? ??? ?else
?? ??? ??? ?{
?? ??? ??? ??? ??? alert('你的浏览器不支持这个脚本!');
?? ??? ??? ??? ??? return false;
?? ??? ??? ?}
?? ??? }
?? ??? return xmlDoc;
}