当前位置: 首页 > news >正文

一个简单实用的AJAX例子

 

学习AJAX时,作了以下这个简单的AJAX例子,没用任何动态语言,完全HTML和JAVASCRIPT,至于服务器源也就小偷了一下www.cc168.com.cn(长城证券)的开放式基金每日净值查询页面。
用XMLHTTP对象获取到WEB页面HTTP内容后,采用Split的方式进行截取,取出自己需要的web部分,然后绑定到页面的div上。CSS样式表也就远程使用了cc168.com.cn的。
^_^,希望长城证券能够宽恕这种偷盗行为。程序员的事,能算“偷”吗?最多算个窃. :- )
原理很简单,但是感觉这种方式比较有用。如果自己网站想提供功能,又不想做数据web服务的话,不妨窃之。

<html>
<head>
<link href="http://www.cc168.com.cn/css/index.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="http://www.cc168.com.cn/css/framework.css" type="text/css"/>
 <script language="javascript">
 
 window.onload = function()
 {
  CreateDateSelect();
 }

 var xmlHttp = false;
 var e;
 
 //创建XMLHTTP对象
 function getXMLHTTPObj()
 {
  var C = null;
  try
  {
   C = new ActiveXObject("Msxml2.XMLHTTP");
  }
  catch(e)
  {
   try
   {
    C = new ActiveXObject("Microsoft.XMLHTTP");
   }
   catch(sc)
   {
    C = null;
   }
  }
  
  if( !C && typeof XMLHttpRequest != "undefined" )
  {
   C = new XMLHttpRequest();
  }
  
  return C;
 }
 
 //调用远程方法
 function callServer(e)
 { 
  try
  {
   if( xmlHttp && xmlHttp .readyState != 0 )
   {
    xmlHttp.abort();
   }
   
   xmlHttp = getXMLHTTPObj();
   
   if( xmlHttp )
   {
    document.getElementById("outgroup").style.display = "none";
    //获取查询日期
    var dateSele = e.options[e.selectedIndex].value;
    document.getElementById("date").innerHTML = dateSele + " 开放式基金净值";

    //构造查询连接字符串
    var url = "http://www.cc168.com.cn/service/FundNetValue.jsp?newEndDate=" + dateSele;
    
    //打开连接
    xmlHttp.open("GET", url, true);
    //设置回调函数
    xmlHttp.onreadystatechange = updatePage;
    //发送请求
    xmlHttp.send(null);
   }
   else
   {
    document.getElementById("flag").innerHTML = "XMLHTTP对象创建失败";
   }
  }
  catch (e)
  {
   document.getElementById("flag").innerHTML = "查询错误:" + e;
  }
 }
 
 //回调处理函数
 function updatePage()
 {
  try {
   if (xmlHttp.readyState == 1)
   {
    document.getElementById("flag").innerHTML = "正在加载连接对象......";
   }

   if (xmlHttp.readyState == 2)
   {
    document.getElementById("flag").innerHTML = "连接对象加载完毕。";
   }

   if (xmlHttp.readyState == 3)
   {
    document.getElementById("flag").innerHTML = "数据获取中......";
   }

   if (xmlHttp.readyState == 4)
   {
    var response = xmlHttp.responseText;
    var OpenValue = response.split("<td class=/"info-head/" width=/"400/" valign=/"top/">")[1];
    var OpenValue = OpenValue.split("</td></tr>")[0];
    //alert(OpenValue);
    document.getElementById("out").innerHTML = OpenValue;
    
    var OpenValue1 = response.split("<td class=/"info-head/" width=/"400/" valign=/"top/">")[2];
    var OpenValue1 = OpenValue1.split("</td></tr>")[0];
    document.getElementById("out1").innerHTML = OpenValue1;
    
    var OpenValue2 = response.split("<td class=/"info-head/" width=/"400/" valign=/"top/">")[3];
    var OpenValue2 = OpenValue2.split("</td></tr>")[0];
    document.getElementById("out2").innerHTML = OpenValue2;
    
    var OpenValue3 = response.split("<td class=/"info-head/" width=/"400/" valign=/"top/">")[4];
    var OpenValue3 = OpenValue3.split("</td></tr>")[0];
    document.getElementById("out3").innerHTML = OpenValue3;
    document.getElementById("flag").innerHTML = "查询结束";

                                document.getElementById("outgroup").style.display = "";
   }
  }
  catch (e)
  {
      document.getElementById("flag").innerHTML = "回调处理错误:" + e;
  }
 }

 //创建日期选择下拉框
 function CreateDateSelect()
 {

  var html = [];
         
  for(var iYear=2005; iYear<=2006; iYear ++)
  {
   for( var iMonth=1; iMonth<=12; iMonth ++ )
   {
    for( var iDay=1; iDay<=31; iDay ++ )
    { 
    html[html.length] = "<option value=/""  + iYear + "/-" + iMonth + "/-" + iDay + "/">" + iYear + "年" + iMonth + "月" + iDay + "日" + "</option>";
    }
   }
  }
      
  document.getElementById("dateSele").innerHTML = "<select name=/"dateSele/" id=/"dateSele/" οnchange=/"callServer(this);/">" + html.join("") + "</select>";
 } 
 </script>
</head>
<body>
 <form>
  <div>请选择交易日期:</div>
  <div>
   <div id="dateSele" align=left>
   </div>
   <div id="flag" align=right></div>
  </div>
  <div id="date"></div>
  <div id="outgroup" style="display:None">
      <div id="out"></div>
      <div id="out1"></div>
      <div id="out2"></div>
      <div id="out3"></div>
  </div>
 </form>
</body>
</html>


代码讲解:
1、代码主要分为JS处理和BODY两大部分(废话 ^_^)
2、BODY部分用了几个层:dataSele : 显示日期选择下拉框;flag : 状态标示;date: 显示选中的日期;outgroup:显示基金的净值结果组;out 到 out3 则是几种类型的开放式基金净值结果
3、JS部分:页面加载处理:页面初始化设置;创建XMLHTTP对象:按不同客户端浏览器创建不同的XMLHTTP连接对象;调用远程方法:构造连接字符串,发送请求;回调处理函数:判断连接对象的返回状态,进行状态显示,完全获取结果后,进行DOM方式的层赋值;创建日期选择下拉框:动态的创建日期选择下拉框,并为其加上选择事件。

相关文章:

  • VS使用技巧
  • 一个最简单的AJAX实例及解析
  • 静态库中有图片,改如何存放呢??
  • 用Java结合SAX 2.0 解析XML文档
  • HDU 2594 Simpsons’ Hidden Talents(辛普森一家的潜在天赋)
  • 在Dom4j中使用xpath
  • C# 文件与目录的基本操作(System.IO)
  • 在JavaScript中使用Java
  • Postgresql 同步流复制
  • ??在JSP中,java和JavaScript如何交互?
  • 在Struts应用中使用Ajax
  • jQuery计算文本宽度和input标签根据输入字符动态自适应宽度的实现
  • Eclipse 3.2.2 安装、汉化和插件配置
  • iOS开发 贝塞尔曲线UIBezierPath(2)
  • Eclipse 平台入门
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 30天自制操作系统-2
  • canvas绘制圆角头像
  • Elasticsearch 参考指南(升级前重新索引)
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Fastjson的基本使用方法大全
  • log4j2输出到kafka
  • Mysql优化
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • nodejs调试方法
  • tab.js分享及浏览器兼容性问题汇总
  • vue-cli在webpack的配置文件探究
  • vue脚手架vue-cli
  • 对超线程几个不同角度的解释
  • 给初学者:JavaScript 中数组操作注意点
  • 观察者模式实现非直接耦合
  • 回顾2016
  • 聚簇索引和非聚簇索引
  • 前端自动化解决方案
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 译有关态射的一切
  • ###C语言程序设计-----C语言学习(3)#
  • #include到底该写在哪
  • #mysql 8.0 踩坑日记
  • (2)Java 简介
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (Java)【深基9.例1】选举学生会
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (zhuan) 一些RL的文献(及笔记)
  • (超详细)语音信号处理之特征提取
  • (七)c52学习之旅-中断
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (算法)求1到1亿间的质数或素数
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET MVC之AOP