zoukankan      html  css  js  c++  java
  • 在本地测试一次成功的AJAX请求

    要在本地测试AJAX,首先是环境的搭建,下面以wamp为例。

    1、先在wamp的官网下载wamp的安装包,网址 http://www.wampserver.com/。

    2、安装wamp。如果安装过程中提示丢失VCRUNTIME140.DLL缺失,请看这篇文章:http://www.jb51.net/article/81595.htm。

    3、安装完wamp后,双击桌面上wamp的快捷方式启动wamp。

    如果wamp正常启动,任务栏右下角有绿色的w图标,如图:

    接下来是代码的编写。

    在wamp安装目录下有一个www文件夹,用来测试的文件都保存在这个文件夹中。

    下面是我的例子,效果图是这样的:

    使用Ajax使当前价格隔一段时间自动更新一次,同时涨跌辐度也跟着更新。这个例子要创建两个页面,一个是前台的html页面,用来发送请求和显示服务器返回来的响应结果,一个是后台的php文件(我给这个文件命名price.php,代码中要用到),用来接收请求。

    首先是html页面的html代码:

     1 <!DOCTYPE HTML>
     2 <html>
     3 <head>
     4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     5 <style type="text/css">
     6 *{
     7   margin: 0;
     8   padding: 0;
     9 }
    10 body{
    11    font-size: 62.5%;
    12    font-family: "微软雅黑";
    13 }
    14 #continer{
    15    position: absolute;
    16    margin: auto;
    17    top: 0;
    18    bottom: 0;
    19    left: 0;
    20    right: 0;
    21    height: 200px;
    22    width: 300px;
    23    background: linear-gradient(to bottom,#D87093,#FFE4E1); 
    24    border: 1px solid #C0C0C0;
    25    border-radius: 10px;
    26    padding: 1em;
    27 }
    28 h2{
    29    font-size: 2em;
    30    font-weight: normal;
    31    text-align: center;
    32    margin-bottom: 0.5em;
    33 }
    34 p{
    35    font-size: 1.5em;
    36    line-height: 1.5em;
    37 }
    38 </style>
    39 </head>
    40 <body>
    41   <div id="continer">
    42     <h2>*ST橡塑(600346)股票行情</h2>
    43     <p id="kaipan">开盘价格:<span id="kaipanprice"></span></p>
    44     <p id="now">当前价格:<span id="nowprice"></span></p>
    45     <p id="zhangdie">涨跌辐度:<span id="index"></span></p>
    46     
    47   </div>
    48   <script>
    49 
    50   </script>
    51 </body>
    52 </html>

    接下来是JavaScript代码:

     1   <script>
     2      function $(id) {
     3          return document.getElementById(id.substring(1));
     4      }
     5      //在页面加载完成时产生一个随机的开盘价
     6      function randomPrice() {
     7          //产生一个随机数
     8          var num =  Math.random()*20;
     9          
    10          $('#kaipanprice').innerHTML = num.toFixed(2);//toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。
    11      }
    12      //封装一个创建XMLHttpRequest对象的函数,可以重复使用
    13      function XMLHttp() {
    14         var xmlhttp;
    15         if(window.XMLHttpRequest) {
    16             xmlhttp = new window.XMLHttpRequest();
    17         } else {
    18             //用来兼容以前的IE浏览器
    19             xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
    20         }
    21         return xmlhttp;
    22      }
    23      
    24      //用一个全局变量保存创建的XMLHttpRequest,
    25      //因为后面这个对象还要在回调函数里调用,不然的话无法在回调函数里调用
    26      var xmlhttp;
    27      
    28      //下面这个函数用来打开一个请求和发送请求
    29      function priceChange() {
    30          xmlhttp = XMLHttp();
    31 
    32          if(xmlhttp) {
    33              //localhost就是wamp安装目录中的www文件夹,我在www文件夹下又创建了my文件夹,在my文件夹中又创建了ajax文件夹
    34              var url = 'http://localhost/my/ajax/price.php';
    35              var data = 'item=nowprice';
    36              //绑定onreadystatechange事件
    37              //JavaScript高级程序设计第三版上说在调用open()方法之前指定onreadystatechange事件能保证跨浏览器兼容性
    38              xmlhttp.onreadystatechange = handle;
    39              
    40              //用post方式打开请求,true表示异步机制
    41              xmlhttp.open('post',url,true);
    42              
    43              //用post方式发送请求必须添加下面这一句代码,否则报错
    44              xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    45              
    46              //post方式的数据要在send()方法中发送,get方式向send()方法中传入null,数据在url中发送
    47              xmlhttp.send(data);
    48            
    49          }
    50          
    51      }
    52      
    53      //指定回调函数
    54      function handle() {
    55             //xmlhttp.readyState=4表示服务器响应完成,并且客户端已接受到全部响应数据,可以在客户端使用了
    56             if(xmlhttp.readyState == 4) {
    57             
    58                 //xmlhttp.status=200表示响应成功,等于304表示响应数据未发生修改可以使用浏览器缓存中的数据
    59                 //if语句的判断条件是照抄JavaScript高级程序设计第三版上的
    60                 if((xmlhttp.status >= 200 && xmlhttp.status < 300) || xmlhttp.status == 304) {
    61                      //我这里返回的是JSON格式的字符串,用JSON对象的parse()方法把字符串转换成一个JavaScript对象
    62                      var obj = JSON.parse(xmlhttp.responseText);
    63                      
    64                      //获取开盘价格
    65                      var kaipanjia = parseFloat($('#kaipanprice').innerHTML);
    66                      
    67                      //写入当前价格
    68                      $('#nowprice').innerHTML = obj.price;
    69                      
    70                      //计算涨跌辐度
    71                      var percent = (100*(obj.price - kaipanjia)/kaipanjia).toFixed(2);
    72                      
    73                      //不同的涨跌辐度使用不同的字体颜色
    74                      if(percent < 0){
    75                         
    76                         $('#index').style.color = "green";
    77                      }
    78                      if(percent > 0){
    79                         
    80                         $('#index').style.color = "red";
    81                      }                     
    82                      if(percent == 0){
    83                         
    84                         $('#index').style.color = "#FFFFFF";
    85                      }
    86                      //写入涨跌辐度                     
    87                      $('#index').innerHTML = percent + '%';
    88                 }
    89             }     
    90      
    91      }
    92   window.onload = function() {
    93      randomPrice();
    94      priceChange();
    //两秒钟更新一次当前价格
    95 updateprice = setInterval(priceChange,2000); 96 }; 97 98 </script>

    JavaScript高级程序设计第三版上说,用get方式发送请求时添加到url末尾的数据必须经过encodeURIComponent()方法编码。

    关于服务器返回的数据格式主要有三种:

    text格式(字符串),保存在XMLHttpRequest对象的responseText属性中

    xml格式,保存在XMLHttpRequest对象的responseXML属性中

    JSON格式,保存在XMLHttpRequest对象的responseText属性中

    下面是服务器端price.php文件的代码:

     1 <?php
     2 //Content-Type指定返回的数据格式,text/xml 对应responXML,text/html对应responseText
     3   header('Content-Type: text/html;charset=utf-8');
     4   
     5   //告诉浏览器不要缓存数据
     6   header('Cache-Control: no-cache');
     7   
     8   //产生一个随机浮点数,传入的参数用于限制范围
     9   function randomFloat($min = 0, $max = 1) {  
    10     return $min + mt_rand() / mt_getrandmax() * ($max - $min);  
    11   }  
    12   $num = number_format(randomFloat(1, 20), 2, '.', '');
    13   
    14   //接收数据
    15   $item = $_POST['item'];//请求的方式要对应,发送数据的名称要对应
    16   $info = "";
    17   if($item == 'nowprice') {
    18      $info = '{"price":'.$num.'}';//返回一个JSON格式的字符串
    19   }
    20   echo $info;//echo的数据是返回给发送请求的页面
    21   
    22 ?>

    代码写完之后,把HTML文件和php文件保存在wamp安装目录下www文件夹下相同的目录下(我的是ajax文件夹),然后通过本地服务器打开html文件(比如我的是http://localhost/my/ajax/gujia.html/),每隔两秒钟就会看到数据的实时更新,而页面并没有刷新。

    PS: 对于返回的xml格式的数据,可以通过操作DOM的方式获取想要的数据,与HTML的DOM规范基本相同。

  • 相关阅读:
    liunx某台服务器无法访问其他服务器!!!!!!!!
    下载历史版本CentOS
    通过sparkstreaming分析url的数据
    Linux查看空间大小的命令
    secureCRT背景颜色
    布谷鸟算法详细讲解
    matlab 绘图
    浏览器内存泄露问题
    C#和java的语法区别
    i-m-a-g-e-7
  • 原文地址:https://www.cnblogs.com/fogwind/p/5975083.html
Copyright © 2011-2022 走看看