用JavaScript与WebService实现网页部分数据XML传送

voca1790

voca1790

2016-02-19 16:15

下面图老师小编要向大家介绍下用JavaScript与WebService实现网页部分数据XML传送,看起来复杂实则是简单的,掌握好技巧就OK,喜欢就赶紧收藏起来吧!

  B/S结构的程序每执行一个操作往往都需要刷新页面,在刷新过程中,服务器不但要将数据发送到客户端,还需要将一些格式信息,比如说表格、图片、标题等重新发送,占用了大量带宽。尽管IE提供了页面缓存的功能,但对于时刻发生变化的动态网页,本地缓存基本上不起什么作用。如果能够让Web服务器只传送关键数据,不传送格式就可以减少带宽占用。当然,在我的系统开发过程中,使用了智能卡进行关键数据加、解密,出于速度考虑,尽可能减少被加密的数据就可以提高信息的显示速度。

  我们可以使用微软提供的webservice.htc实现通过JavaScript调用WebService,同时利用XML和XSL实现数据与格式相分离。主要技术要点如下:

  一、WebService的调用:

  首先从微软网站上下载webservice.htc,使用方法就不说了,网上有详细的调用说明。在网页BODY中添加一个DIV,实现对webservice.htc的引用,如下:

div id="htcWService" style="BEHAVIOR: url( ../../global/webservice.htc)"/div

  同时添加两个DIV,用来显示错误信息以及结果信息:

DIV class="homemed" id="SearchResult"b说明:/b输入户号,用鼠标点击“检索”按钮开始检索。/DIV
DIV class="homemed" id="ErrorMessage"/DIV

  编写JavaScript,实现对WebService的引用:

function openWebService()
{
    htcWService.useService("../../WebServices/Garkcx.asmx?WSDL","Garkcx");
}

  WebService返回经过编码的XML(在这里我们对信息进行了智能卡加密),在客户端解码后,我们可以借助MSXML实现对XML解析以备并进行格式处理。

  二、异步调用WebService,解析XML

  声明两个变量,用来存储ActiveX对象:

var objXMLData;       //存储要解析的 XML 文档
var objXMLStyle;      //存储 XSLT STYLE

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)

  通过JavaScript调用WebService的代码如下:

function doSearch()
{
  var iCallID;
 
 
 
  iCallID = htcWService.Garkcx.callService(dataArrived, "DoSearch", strUserGUID, strSearchMethod, strDataBaseName, strSearchCondition, encodeMethod);
}

  因为是异步调用,所以当远程服务调用完成后会触发dataArrived方法。”DoSearch”后的内容是调用WebService所跟的参数。下面我们看看dataArrived代码:

function dataArrived(objResult)
{
  if(objResult.error)
  {
    var strErrorCode = objResult.errorDetail.code;
    var strErrorMsg = objResult.errorDetail.string;
    var strErrorRaw = objResult.errorDetail.raw;
   
    document.all('ErrorMessage').innerHTML = 'b* 错误 -/b 无法找到指定身份证号的用户。br /' + strErrorMsg;
  }
  else
  {
    try
    {
      objXMLData = new ActiveXObject('MSXML2.FreeThreadedDOMDocument');
    }
    catch(e){}

// 判断解析器对象是否可以使用
    if (objXMLData == null)
    {
      document.all('ErrorMessage').innerHTML = '* b错误: 不正确的 XML 解析器版本./bbr /';
      return;
    }
   
   
    //此处有一些解码的代码,省略
   
    strResult = objResult.value;

    // 事件不断被触发,检测XML数据是否装载完成
    objXMLData.onreadystatechange = dataLoaded;
   
    objXMLData.validateOnParse = true;
    objXMLData.async = true;
   
    // 装载从 Web Service 返回的结果
    objXMLData.loadXML(strResult);
  }
}

function dataLoaded()
{
  // 异步访问,如果 XML 解析器的 readyState 属性为 4, 表示装载结束。
  if (objXMLData.readyState == 4)
  {
    if (objXMLData.parseError.errorCode != 0)
      // 装载过程出现错误
      document.all('ErrorMessage').innerHTML = 'b* 错误/b - 无法解析 XML 数据结果.';
    else
    {
      document.all('SearchResult').innerHTML = '';
      ApplyXslStyle();  // 应用 XSLT 样式
    }
  }
}

  下面将传递过来的XML应用XSL样式并显示在IE浏览器中,这是通过调用ApplyXslStyle()方法实现的。该方法使用“MSXML2.XSLTemplate”组件实现解析操作。因为XSL样式通常不会发生变化,所以本地缓存有助于提高XSL访问效率。代码如下:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)

function ApplyXslStyle()
{
  objXMLStyle = new ActiveXObject('MSXML2.FreeThreadedDOMDocument');
  objXMLStyle.async = false;
  objXMLStyle.resolveExternals = false;
 
  strXslt = '../../XSLT/Czrk.xsl';
  objXMLStyle.load(strXslt);
 
  if (objXMLStyle.readyState == 4)
  {
    if (objXMLStyle.parseError.errorCode != 0)
      document.all('ErrorMessage').innerHTML = 'b* 错误/b - 无法解析 XSLT 格式.';
    else
    {
      document.all('SearchResult').innerHTML = '';
      // 格式化并输出结果
      DisplayResult();
    }
  }
}

function DisplayResult()
{
  // 创建一个新的 XSLTemplate 对象并设置样式表
  var objTemplate = new ActiveXObject('MSXML2.XSLTemplate');
  objTemplate.stylesheet = objXMLStyle;
 
  // 创建处理器来处理 XML 数据
  var objProc = objTemplate.createProcessor();
 
  // 指明使用的 XML 数据对象
  objProc.input = objXMLData;
 
  // 应用 XSL 样式,并将结果赋值给字符串
  if (objProc.transform() == true)
  {
    var strResult = objProc.output
    document.all('SearchResult').innerHTML = strResult;   
  }
  else
    document.all('ErrorMessage').innerHTML = 'b* 错误/b - 无法对查询结果应用 XSLT 格式.';
}


  这样,通过WebService传递过来的XML数据就经过XSL格式处理后显示在IE里面。下面给出几个截图:

  图片(1)检索数据前

  ..............................................................................................

  图片(2)检索数据后

  ..............................................................................................

图片(3)自定义检索条件

展开更多 50%)
分享

猜你喜欢

用JavaScript与WebService实现网页部分数据XML传送

Web开发
用JavaScript与WebService实现网页部分数据XML传送

用Javascript实现无刷新更新数据

Web开发
用Javascript实现无刷新更新数据

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

用JavaScript显示XML

Web开发
用JavaScript显示XML

使用JavaScript访问XML数据

Web开发
使用JavaScript访问XML数据

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用javascript操作xml

Web开发
用javascript操作xml

用javascript实现页面无刷新更新数据

Web开发
用javascript实现页面无刷新更新数据

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

技术人员求职必看之Javascript词法作用域

技术人员求职必看之Javascript词法作用域

在Word2010中使用“重复键入”功能

在Word2010中使用“重复键入”功能
下拉加载更多内容 ↓