Colorful Life2010

JQuery在非服务器环境下解析XML的折中解决方案[转]
Weather:晴 西南风3-4级 (6~15)℃

这2个代码在本地硬盘上运行都有问题:
 


$(function() {
   $.get('f.xml',function(data) {
       alert(data);//ok
       $('entry',data).each(function() {
               alert('find');
       });
   });
});

 

$(document).ready(function() {
        $.get("d.xml",function(xml){ 
          
          alert($('/controls/control', xml).text()); 
        });
      });
 

d.xml

 
  aaaaa 

 
 


我开始不知道怎么回事,于是去了官方论坛上与Learning JQuery的作者以及Jquery官方开发人员讨论了一下。
他们开始也没有给出解决方案。但是有一个Mike找到了表面原因,那就是:
在本地硬盘上运行不了(非服务器环境下运行都运行不了),放在服务器上运行就可以。
深层次分析不知道为什么。


很感谢这个Mike。
我研究了一会儿,搞定了临时折中的解决方案,分享给大家:
 

  
    $(document).ready(function() {
        $.get("d.xml",function(xml){ 
          var xmlDoc=null;
          if ($.browser.msie)
          {
            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.loadXML(xml); 
          }
          else
          {
          var parser = new DOMParser();
          var xmlDoc= parser.parseFromString(xml, "text/xml");
          }
          
          alert($('/controls/control', xmlDoc).text()); 
        });
      });
  
 

历史上的今天: [2005/11/05]ado多次按条件使用一个记录集中的数据的方法
[2005/11/05]扔掉二百五
[2004/11/05]天又冷了啊>>>

[JQuery在非服务器环境下解析XML的折中解决方案[转]]的回复

PeriCHR 于 2007-12-19 10:00:48 发表 | IP:222.66.182.*

好像是因为非服务器环境下,xml的mime默认是设定为纯文本的text/html而不是XML文档的text/xml...

比如在$.ajax中强行指定dataType为xml的时候,返回error()而不是success()……

柠檬园主 于 2007-12-20 14:23:20 发表 | IP:116.3.6.*

嗯,至少是知道原因了,而不至於搗鼓幾天而鬱悶得不行,就像跨域問題一樣。呵呵。    

littlenew 于 2008-02-03 14:03:04 发表 | IP:116.25.187.*

我刚学完load函数,于是想去试一下,试验结果:一堆的乱码,真是郁闷!

一想起用utf-8编码就郁闷。

问题1:被load的文件是不是不能包含其它文件。比如:<!--#include file="../../test.asp"-->

问题2:utf-8与gb2312编码在access中存储方式有什么不同。(先说明一点,我一直用的是gb2312编码。被load的文件是用utf-8编码的,如果这个动态文件的内容不是从数据库中取出来的,而是一个静态的内容,这里不会出现乱码,如果是从数据库中取数据的话,就出现了乱码,比如说: <%=rs("ClassName")%>。为啥?)

4#   柠檬园主 于 2008-02-03 22:06:23 发表 | IP:116.3.12.*

回答1:jQ的load是浏览器端动作,load服务器端生成的html,跟你的include无关,不管你include没有,只要load的页面能正常生成html就可以了.

回答2:在数据库中(不管是AC还是SQL),数据默认都是以utf-8编码存储的.要用ajax的话,必须保证取到的数据和当前页的编码一致,否则就会乱码.如果你确定两个页面的编码不同,除了你把两个改成一样的外,也可以用一个函数把生成的结果转化一下.网上搜一下就找到了.

5#   littlenew 于 2008-02-04 15:06:42 发表 | IP:116.30.172.*
为防止信息丢失,请复制以下您提交的留言:

(百思不解)回答1:load("/nav-utf.asp");

 nav-utf.asp

<!--#include file="../asp-bin/webClass.asp"-->
<!--#include file="../waitYou/article_data_path.asp"-->
<%
   set sys = new ClassMyWeb
   set conn = sys.ConnectDB(MdfDataPathqt)
   set rs   = server.CreateObject("adodb.recordset")
%>
<ul>
<li><a href="../article/index.html" target="_self" onClick="this.blur();"></a></li>
<%
     sql="select id,ClassName from [Infotype] where Deepth =1 order by LinknodeID"
      rs.open sql,conn,1,1
      if not rs.eof then
        do while not rs.eof
%>
<li><a href="../article/<%=rs("id")%>_1.html" target="_self" onClick="this.blur();"><%=rs("ClassName")%></a></li>
<%
        rs.movenext
       loop
      end if
     rs.close
   %>
</ul>
然后我的IE就报JS错了,但FF却是乱码,但没有错。但将上面的include 去掉的话,IE也是出现乱码,没有JS错误,FF更没有错了,但还是乱码。

将上面运行以后得到的html代码再另存或者覆盖本文件,可以正常显示,并没有出现乱码。IE和FF都正常。

两个浏览器都试了。要不你也试一下。IE是会报JS错的。

jquery-1.2.2.js

6#   柠檬园主 于 2008-02-04 20:57:20 发表 | IP:116.3.12.*

呃。。。你光给这些我也没法试呀。我这个站现在用的就是1.2.2版的JQ,有JS错误就找一下是哪儿错呀。

乱码的问题,肯定还是跟两个文件的编码不一样导致的。另外,在用UTF-8的时候,即使文件另存的编码设置为UTF-8外,也得在ASP里面设置输出编码为UTF-8。

<%@ Language="VBScript" CodePage=65001%>
<%
Option Explicit      '变量声明
Response.Charset = "UTF-8"   'Response unicode

7#   littlenew 于 2008-02-05 19:55:42 发表 | IP:116.30.175.*

OK,OK,OK,是我没有把问题说清楚。乱码问题已经 解决 。

文件是这样的:

6230.html(静态页面):

  <script>$("nav").load("nav-utf.asp");</script>

nav-utf.asp就是上贴的代码。

只要nav-utf.asp有包含文件:

<!--#include file="../asp-bin/webClass.asp"-->
<!--#include file="../waitYou/article_data_path.asp"-->
在,就会出现system error:。这样的JS错误,并且不会显示。但转化成

<%

  set conn = server.createobject……

  set  rs    = ……

%>这样就不会出错,一切都正常。我想知道这是为什么?why?

(PS:你也可以用一个静态的页面将你数据库中的

FCKeditor Python ColdFusion SQL ASP CSS 数据库 服务器 Google读出来呀,但那个列出上面的文件要用到包含文件。OK,就这样,如果再没有错误的话,就可能是你的浏览器出了问题了。)

8#   柠檬园主 于 2008-02-05 21:25:27 发表 | IP:116.3.14.*

请看这里http://3rgb.com/b/b.html

9#   littlenew 于 2008-02-06 15:59:31 发表 | IP:116.24.173.*

明明是用editplus另存的utf-8编码,但用dreamweaver打开时,查看编码居然是gb2312 的,怪不得总是出错。晕死了,真是太郁闷了。

咋就会这样呢?真是搞不懂。

JS报错时也真的好奇怪:system error: -1……(反正是一个超大的负数)。

根据我的经验,因为编码问题会出现乱码,只要改了也就行了,但这次来了个负数。

汗,问题解决。

 

10#   littlenew 于 2008-02-06 16:01:41 发表 | IP:116.24.173.*

新年快乐!恭喜发财!

11#   柠檬园主 于 2008-02-17 09:27:26 发表 | IP:221.201.144.*

新年快乐~DW如果用的是中文版,默认肯定是GB2312啦,可以在设置里改一下默认设置应该就可以了。但editplus默认的保存utf-8是不包含BOM的,DW包不包含我就不清楚啦,但像VisualStudio是要包含BOM的。包含和不包含BOM的页面混在一起,也有可能出现乱码问题。

12#   littlenew 于 2008-02-18 17:28:50 发表 | IP:61.141.86.*

对了,你还记得你的那个特别NB的让我的浏览器出错的代码吗?

能贴出来吗?

我找了半天没有找到.

13#   柠檬园主 于 2008-02-20 21:37:47 发表 | IP:116.3.18.*

呃,不记得了。。。    

14#   littlenew 于 2008-02-23 18:12:31 发表 | IP:116.24.61.*

可惜了,没有记住?!!!!!!

我到是想收集一下这方面的内容。以防以后我这个小菜鸟碰到这种问题对付不了,到那个时候也就麻烦了。   

15#   柠檬园主 于 2008-02-25 09:19:31 发表 | IP:116.3.17.*

给我点提示,我现在只隐约记得有这么个事儿,但具体是什么,我自己一点也想不起来了~~    

16#   littlenew 于 2008-02-26 17:22:24 发表 | IP:218.17.62.*

我:你可真牛呀,居然让我的浏览器解释出错。……(不记得了)。

柠檬:你真能挖苦我呀……

网友:我的FF也挫了。

 

我就记得这么多了,找不到也就算了。

17#   柠檬园主 于 2008-02-27 09:10:40 发表 | IP:116.3.12.*

印象还是有的,过年前肯定记得,春节吃得大脑不全了。但你没说清到底是什么错误,那我给你2个选择。

1、javascript出错,页面无法正常进行。

2、浏览器直接就无法显示页面,FF提示说XML解析不正确。

18#   littlenew 于 2008-02-27 10:04:39 发表 | IP:218.18.129.*

应该是第二种的情况,解析出错,导致不能正常浏览,我没有发现你的网站有什么JS错误。但听你说好像是ContentType什么的问题。

19#   柠檬园主 于 2008-02-27 11:40:41 发表 | IP:116.3.12.*

那我知道了,因为针对XHTML,服务器端输出应该是application/xhtml+xml,但默认都是text/html。于是用了w3c提供的方法,

'If InStr(Request.ServerVariables("HTTP_ACCEPT"), "application/xhtml+xml") > 0 Then
'    Response.ContentType = "application/xhtml+xml"
'Else
'    Response.ContentType = "text/html"
'End If

但是用了上面这段代码后,在FF里就不能正常浏览了。

20#   littlenew 于 2008-02-28 20:51:06 发表 | IP:116.24.60.*

哈哈,就是这个代码,要的就是这个。

收藏。

21#   柠檬园主 于 2008-03-02 17:03:07 发表 | IP:221.201.168.*

想起这件事儿来可费了不少劲啊,哈哈~~

22#   littlenew 于 2008-03-02 20:39:30 发表 | IP:116.24.61.*

是嘛,哈哈,辛苦了。

你的FCK又变样子了,你的步法可真快呀。现在我还在用2.4版本的。

23#   柠檬园主 于 2008-03-03 20:43:00 发表 | IP:221.201.144.*

在用最新版的了,虽然还有不少BUG,下的当天偶就去报告了一个BUG.

Post a Comment~