在本地测试一次成功的AJAX请求

Posted Fogwind

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在本地测试一次成功的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规范基本相同。

以上是关于在本地测试一次成功的AJAX请求的主要内容,如果未能解决你的问题,请参考以下文章

AJAX 请求触发两次,而成功调用一次

Ajax 调用webservice 解决跨域请求和发布到服务器后本地调用成功外网失败的问题

ajax中的onload和readychange区别

jQuery AJAX中的$.ajax()方法请求成功却始终进入error问题的解决方案及原因记录

ajax获取数据后怎么去渲染到页面

成功ajax重试后没有.done