在本地測試一次成功的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規范基本相同。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM